Sembra intuitivamente evidente che la seguente legge dovrebbe contenere:Come posso mostrare che la traversata interagisce sensibilmente con fmap?
traverse f . fmap g = traverse (f . g)
L'unica Traversable
legge che sembra da applicare direttamente è
fmap g = runIdentity . traverse (Identity . g)
che cambia il problema di
traverse f . runIdentity . traverse (Identity . g)
L'unica legge che sembra avere vagamente la forma giusta da applicare a questo è e legge sulla naturalità. Ciò, tuttavia, riguarda le trasformazioni applicative e non vedo nessuna di quelle intorno.
A meno che non manchi qualcosa, l'unica cosa rimasta è una prova di parametrismo, e non ho ancora avuto la minima idea di come scriverli.
Questo è piuttosto impressionante. Come ti è venuto in mente che getCompose. Compose' trick? – dfeuer
Suggerisco di inviare questa prova per l'inclusione nella documentazione di 'Data.Traversable'. – dfeuer
@dfeuer È stato il modo più rapido per ottenere un 'Compose' nel posto giusto per applicare la legge sulla composizione. Questo passaggio potrebbe anche essere soppresso se applichiamo 'getCompose' su entrambi i lati della legge di composizione prima di usarlo, come fa la documentazione' Control.Lens.Traversal'. – duplode