[Haskell-cafe] SYB supports genuine gmap. [Was: Polymorphic updating with TC/TFs?]
adam vogt
vogt.adam at gmail.com
Wed Dec 18 16:41:34 UTC 2013
Hi Oleg,
Interesting. I wasn't aware of that one when I wrote the "fake"
version. I can see one small disadvantage for the "real" one: many
hand-written data instances (ex. Data.Map) have defined:
gunfold _ _ = error "gunfold"
So the "real" version will fail there. On the other hand, the gfoldl
defined in such instances is enough to support functions like
`everywhere (mkT (+ (1::Integer)))'.
For reference, the code moved from darcs.haskell.org to:
<http://code.haskell.org/generics/comparison/SYB1_2/>
Regards,
Adam
On Wed, Dec 18, 2013 at 4:06 AM, <oleg at okmij.org> wrote:
>
> adam vogt wrote
>> Changing type parameters isn't supported by the ones I know (syb), but
>> you can still fake it: <http://www.haskell.org/haskellwiki/SYB#fmap>.
>
> SYB supports the type-changing generic map, of the signature
>> gmap2 :: forall a b c . (Data a, Data b,
>> Data (c a), Data (c b), Data (c X)) =>
>> (a -> b) -> c a -> c b
>
> It was discovered back in 2008. Please see the following thread starting
>
> http://www.haskell.org/pipermail/generics/2008-July/000349.html
>
>
> The fake described in haskellwiki/SYB#fmap with unsafeCoerce is not
> needed at all. There is a genuine gmap.
>
>
More information about the Haskell-Cafe
mailing list