Folks,

How can I create a generic pickler that's parameterized on type and constructor?

I define types like this:

newtype AvgPot = AvgPot Word64 deriving (Show, Typeable)
newtype NumberOfPlayers = NumberOfPlayers Word16 deriving (Show, Typeable)

and then have a lot of boiler-plate code like this, a pickler for each type:

puAvgPot :: PU AvgPot
puAvgPot = wrap (\a -> AvgPot a, \(AvgPot b) -> b) endian

where

data PU a = PU { appP :: (a, [Word8]) -> [Word8],
                 appU :: [Word8] -> (a, [Word8]) }

wrap :: (a -> b, b -> a) -> PU a -> PU b

What I would like to have is a generic pickler that's parameterized on constructor and type. These can and will be the same, though. I want something like this, how can it be done in Template Haskell or otherwise?

pickler :: PU T
pickler Con pa = wrap (\a -> Con a, \(Con b) -> b) pa

        Thanks, Joel

--
http://wagerlabs.com/





_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to