1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
{-# LANGUAGE TypeFamilies #-} module Col where type family Elem c type instance Elem [e] = e class Col c where singleton :: Elem c -> c add :: c -> Elem c -> c instance Col [e] where singleton = \x -> [x] add = flip (:)