[Haskell-cafe] lost in generics

Bas van Dijk v.dijk.bas at gmail.com
Thu Oct 20 23:49:51 CEST 2011


On 20 October 2011 19:12, Rustom Mody <rustompmody at gmail.com> wrote:
> And of course which are easier and which more difficult to dig into.

If you're looking for an example for the new GHC generic mechanism: I
recently added a generic default implementation to the ToJSON and
FromJSON type classes of the aeson package (not in mainline yet):

class ToJSON a where
    toJSON   :: a -> Value

    default toJSON :: (Generic a, GToJSON (Rep a)) => a -> Value
    toJSON = gToJSON . from

class FromJSON a where
    parseJSON :: Value -> Parser a

    default parseJSON :: (Generic a, GFromJSON (Rep a)) => Value -> Parser a
    parseJSON = fmap to . gParseJSON

See:

https://github.com/basvandijk/aeson/blob/newGenerics/Data/Aeson/Types/Internal.hs#L895

It wasn't that difficult to implement. However I did need to use some
advanced type-level tricks to convert to and from records.

Regards,

Bas



More information about the Haskell-Cafe mailing list