{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE FlexibleInstances #-} module Listable where class Listable c a where toList :: c -> [a] fromList :: [a] -> c instance Listable a a where toList a = [a] fromList (a:_) = a instance Listable (a,a) a where toList (a,b) = [a,b] fromList (a:b:_) = (a,b) instance Listable (a,a,a) a where toList (a,b,c) = [a,b,c] fromList (a:b:c:_) = (a,b,c)