2009-01-30 5 views
4

Ce qui me manque, c'est la possibilité d'appliquer partiellement le second argument d'une fonction plutôt que le premier. Ceci est particulièrement utile quand je veux passer la fonction à quelque chose comme la carte, mais sans avoir à écrire un lambda à chaque fois. J'ai écrit ma propre fonction pour cela (définition ci-dessous, juste au cas où il n'y aurait pas de fonction intégrée pour cela et que quelqu'un d'autre était curieux), mais j'aimerais vraiment savoir s'il existe déjà quelque chose dans le Prélude pour cet idiome comme je préfère réutiliser plutôt que réinventer.Existe-t-il un équivalent Haskell intégré pour std :: bind2nd de C++?

Voici ma définition et un exemple trivial:

bind2nd :: (a -> b -> c) -> b -> a -> c 
bind2nd f b = \a -> f a b 

foo :: Int -> Bool -> String 
foo n b | b = show n 
     | otherwise = "blabla" 

alwaysN :: Int -> String 
alwaysN = bind2nd foo True 

Répondre

15

Il est appelé flip.

Exemple:

Prelude> flip (-) 2 3 
1 

Pour référence ultérieure, il aurait été trouvé en recherchant simplement Hoogle pour la signature de type dans votre question, à savoir (a -> b -> c) -> b -> a -> c. :-)