prologue-1.0.1: src/Data/List/Class.hs
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE TypeFamilies #-}
module Data.List.Class where
import qualified GHC.Exts as GHC
import qualified Data.Vector as V
-- === Types ===
type family Item l
class FromList l where fromList :: [Item l] -> l
default fromList :: (GHC.IsList l, GHC.Item l ~ Item l)
=> [Item l] -> l
fromList = GHC.fromList
class ToList l where toList :: l -> [Item l]
default toList :: (GHC.IsList l, GHC.Item l ~ Item l)
=> l -> [Item l]
toList = GHC.toList
class FromListUnsafe l where fromListUnsafe :: [Item l] -> l
class ToListUnsafe l where toListUnsafe :: l -> [Item l]
class (FromList l, ToList l) => IsList l
instance (FromList l, ToList l) => IsList l
class (FromList l, ToList l) => IsListUnsafe l
instance (FromList l, ToList l) => IsListUnsafe l
-- === Instances ===
type instance Item (V.Vector a) = a
instance FromList (V.Vector a)
instance ToList (V.Vector a)