blob: 2da7cb4117932e0b66ecdfa845e7dadc572cd884 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
{-# 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)
sumCol :: (Col c, Elem c ~ Int) => c -> Int
sumCol c | isEmpty c
= 0
| otherwise
= let (x,xs) = headTail c
in x + (sumCol xs)
-- data CP :: * -> * where
-- CP :: (Col c1, Col c2, Elem c1 ~ Elem c2, Elem c2 ~ Int) => (c1,c2) -> CP Char
|