{-# 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) sawpOne c1 c2 = let (x,c1') = headTail c1 (y,c2') = headTail c2 in (add c1' y,add c1' x)