<div dir="auto"><a href="http://hackage.haskell.org/package/generics-mrsop" style="font-family:sans-serif">http://hackage.haskell.org/package/generics-mrsop</a><span style="font-family:sans-serif"> comes with both a deep and a shallow encoding of datatypes.   </span><div dir="auto" style="font-family:sans-serif"><br></div><div dir="auto" style="font-family:sans-serif">The paper is here: <a href="https://doi.org/10.1145/3240719.3241786">https://doi.org/10.1145/3240719.3241786</a></div></div><br><div class="gmail_quote"><div dir="ltr">On Sat, Jan 26, 2019, 13:44 Marco Zocca <<a href="mailto:zocca.marco@gmail.com">zocca.marco@gmail.com</a> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi all,<br>
<br>
 I'm a bit at a loss regarding this: say we have a value from a nested<br>
algebraic type (definitions at the bottom)<br>
<br>
testT2 :: T2<br>
testT2 = T2 B (Left 42)<br>
<br>
a generic encoding computed with `from` only goes one level deep,<br>
leaving the sub-terms as they are :<br>
<br>
λ> from testT2<br>
SOP (Z (I B :* (I (Left 42) :* Nil)))<br>
<br>
However, is it possible to recursively encode and collect all the<br>
sub-terms, until primitive types or enumerations are encountered? The<br>
encoded sub-terms from the example above are as follows:<br>
<br>
λ> from B<br>
SOP (S (Z Nil))<br>
λ> from (Left 32 :: Either Int Char)<br>
SOP (Z (I 32 :* Nil))<br>
<br>
where<br>
<br>
{-# language DeriveGeneric #-}<br>
import qualified GHC.Generics as G<br>
import Generics.SOP<br>
<br>
data T1 = A | B | C deriving (G.Generic)<br>
instance Generic T1<br>
<br>
data T2 = T2 { t21 :: T1 , t22 :: Either Int Char } deriving (G.Generic)<br>
instance Generic T2<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
To (un)subscribe, modify options or view archives go to:<br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
Only members subscribed via the mailman list are allowed to post.</blockquote></div>