module Data.TrieMap.Representation (Repr(..)) where
import Data.TrieMap.Sized
import Data.TrieMap.TrieKey
import Data.TrieMap.Class
import Data.TrieMap.Rep
import Data.TrieMap.Rep.Instances ()
import Data.TrieMap.Representation.TH
import Data.Complex
import Data.Tree
import Data.Ratio
import Foreign.C.Types
instance (TKey k, Repr a) => Repr (TMap k a) where
type Rep (TMap k a) = [(Rep k, Rep a)]
toRep (TMap m) = foldrWithKeyM (\ k (Elem a) xs -> (k, toRep a):xs) m []
fromRep xs = TMap (fromDistAscListM [(k, Elem (fromRep a)) | (k, a) <- xs])
genOrdRepr ''Float
genOrdRepr ''Double
genRepr ''Bool
genRepr ''Tree
genRepr ''Ratio
genRepr ''Maybe
genRepr ''Complex
genRepr ''CInt
genRepr ''CChar
genRepr ''CSChar
genRepr ''CUChar
genRepr ''CShort
genRepr ''CUShort
genRepr ''CUInt
genRepr ''CLong
genRepr ''CULong
genRepr ''CLLong
genRepr ''CULLong
genRepr ''CClock
genRepr ''CTime
genRepr ''CFloat
genRepr ''CDouble