module Data.TrieMap.Representation.Instances.Basic () where
import Data.TrieMap.Representation.Class
import Data.TrieMap.Representation.TH
import Control.Monad
import qualified Data.Vector as V
import Language.Haskell.TH
instance Repr a => Repr [a] where
type Rep [a] = V.Vector (Rep a)
toRep = V.map toRep . V.fromList
$(let genTupleRepr n = do
let ts = [mkName [a] | a <- take n ['a'..]]
xs <- sequence [newName [a] | a <- take n ['a'..]]
let toR = 'toRep
let tupleT = foldl AppT (TupleT n) [VarT t | t <- ts]
return [InstanceD [ClassP ''Repr [VarT t] | t <- ts]
(ConT ''Repr `AppT` tupleT)
[TySynInstD ''Rep [tupleT] (foldl AppT (TupleT n) [ConT ''Rep `AppT` VarT t | t <- ts]),
FunD toR
[Clause [TupP [VarP x | x <- xs]]
(NormalB (TupE [VarE toR `AppE` VarE x | x <- xs])) []] ]]
in liftM concat $ mapM genTupleRepr [2..10])
genOrdRepr ''Float
genOrdRepr ''Double
genRepr ''Maybe
genRepr ''Either
genRepr ''Bool
genRepr ''()
genRepr ''Ordering