packages feed

hirt-0.0.1.0: Listable.hs

{-# 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)