5 votes

Confusion entre (fmap length Just) [1,1,1,1] et fmap length $ Just [1,1,1,1]

Je comprends que les parenthèses imposent un ordre d'opérations différent, mais je ne comprends pas bien le premier résultat :

>> (fmap length Just) [1, 2, 3]
1

En revanche, l'exemple suivant est tout à fait logique : nous appliquons la fonction "length" à la structure "Just", et nous devrions donc obtenir "Just [length of list]" :

>> fmap length $ Just [1, 2, 3]
Just 3

Que se passe-t-il dans le premier cas ?

11voto

Daniel Wagner Points 38831

Dans le premier cas, vous obtenez l'instance de fonction de Functor pour lequel fmap = (.) , donc :

fmap length Just [1,2,3]
=
(length . Just) [1,2,3]
=
length (Just [1,2,3])

En Foldable instance pour Maybe dit que Nothing ont une longueur de 0 et Just ont une longueur de 1 -- ce qui est tout à fait sensé si l'on pense à Maybe a comme une collection de a qui a au plus un a en elle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X