[Haskell-cafe] generics-sop : deep flattening of nested algebraic values ?

Arian van Putten aeroboy94 at gmail.com
Sat Jan 26 13:28:54 UTC 2019


http://hackage.haskell.org/package/generics-mrsop comes with both a deep
and a shallow encoding of datatypes.

The paper is here: https://doi.org/10.1145/3240719.3241786

On Sat, Jan 26, 2019, 13:44 Marco Zocca <zocca.marco at gmail.com wrote:

> Hi all,
>
>  I'm a bit at a loss regarding this: say we have a value from a nested
> algebraic type (definitions at the bottom)
>
> testT2 :: T2
> testT2 = T2 B (Left 42)
>
> a generic encoding computed with `from` only goes one level deep,
> leaving the sub-terms as they are :
>
> λ> from testT2
> SOP (Z (I B :* (I (Left 42) :* Nil)))
>
> However, is it possible to recursively encode and collect all the
> sub-terms, until primitive types or enumerations are encountered? The
> encoded sub-terms from the example above are as follows:
>
> λ> from B
> SOP (S (Z Nil))
> λ> from (Left 32 :: Either Int Char)
> SOP (Z (I 32 :* Nil))
>
> where
>
> {-# language DeriveGeneric #-}
> import qualified GHC.Generics as G
> import Generics.SOP
>
> data T1 = A | B | C deriving (G.Generic)
> instance Generic T1
>
> data T2 = T2 { t21 :: T1 , t22 :: Either Int Char } deriving (G.Generic)
> instance Generic T2
> _______________________________________________
> Haskell-Cafe mailing list
> To (un)subscribe, modify options or view archives go to:
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
> Only members subscribed via the mailman list are allowed to post.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20190126/6db191f1/attachment.html>


More information about the Haskell-Cafe mailing list