blob: 288c6e06084593580d1ed92a654899b5a207e7a5 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
{-# LANGUAGE TypeFamilies #-}
module ColInference where
type family Elem c
type instance Elem [e] = e
class Col c where
isEmpty :: c -> Bool
add :: c -> Elem c -> c
headTail :: c -> (Elem c,c)
addAll :: (Col c1, Col c2, Elem c1 ~ Elem c2) => c1 -> c2 -> c2
addAll c1 c2
| isEmpty c1
= c2
| otherwise
= let (x,c1') = headTail c1
in addAll c1' (add c2 x)
|