Data
определяет как одну из основных функций gfoldl
:
gfoldl
:: (Data a)
=> (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> a
-> c a
Какова цель c
и c (d -> b)
в ней? Почему это не просто обычная складка, что-то вроде
gfoldl'
:: (Data a)
=> (forall d. Data d => r -> d -> r)
-> r
-> a
-> r