{-# LANGUAGE UndecidableInstances #-} module Data.List.Class where import Data.Item import Prelude import Data.Convert import Control.Lens type ToList a = Convertible a [Item a] type ToList' a = Convertible' a [Item a] type FromList a = Convertible [Item a] a type FromList' a = Convertible' [Item a] a type IsList a = (ToList a, FromList a) type IsList' a = (ToList' a, FromList' a) toList :: ToList a => a -> [Item a] toList' :: ToList' a => a -> [Item a] fromList :: FromList a => [Item a] -> a fromList' :: FromList' a => [Item a] -> a asList :: IsList a => Iso' a [Item a] asList' :: IsList' a => Iso' a [Item a] toList = convert ; {-# INLINE toList #-} toList' = convert' ; {-# INLINE toList' #-} fromList = convert ; {-# INLINE fromList #-} fromList' = convert' ; {-# INLINE fromList' #-} asList = iso toList fromList ; {-# INLINE asList #-} asList' = iso toList' fromList' ; {-# INLINE asList' #-}