36 votes

Style de codage Haskell: map, fmap ou <$>?

Y a-t-il une raison de préférer l'une des notations suivantes aux autres ou s'agit-il simplement d'une question de préférence?

 map toLower "FOO"

fmap toLower "FOO"

toLower <$> "FOO"
 

En passant: je me rends compte que <$> est identique à `fmap` . Ai-je raison de supposer que map est simplement une forme moins générale de fmap ?

39voto

Ganesh Sittampalam Points 17695

Comme vous le dites, map est moins la forme générale de l' fmap. Si vous savez que vous avez une liste alors je voudrais utiliser map car il rend le code plus clair et si vous faites une erreur, le message d'erreur est susceptible d'être moins à confusion. Cependant, dans une large mesure, c'est une question de préférence.

(<$>) est le même que fmap, mais n'est pas exportée par le Prélude donc pas disponible par défaut, mais il est facile de les importer à partir d' Data.Functor ou Control.Applicative et est rapidement en train de devenir un standard pour ce faire.

12voto

Neil Brown Points 2105

Je conviens avec Ganesh que map est plus clair pour les listes. J'utilise <$> sur fmap , sauf si cela est appliqué partiellement. J'utiliserais donc fmap reverse pour déclarer une fonction qui inverse tous les éléments d'un certain foncteur, mais si j'ai tous les arguments disponibles (par exemple, si j'écris une ligne dans un bloc do ) J'ai tendance à utiliser le formulaire d'opérateur: reverse <$> f x

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