summaryrefslogtreecommitdiff
path: root/testsuite/tests/indexed-types/should_compile/ColGivenCheck2.hs
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