4 votes

Notation Haskell >.>

Dans le livre "The Craft of Function Programming", le symbole '>.>' relie les fonctions entre elles, dans le sens inverse de '.'. Mais lorsque je l'ai implémenté avec ghci, l'erreur '>.>' est affichée hors de portée. Pourquoi ? S'agit-il d'une ancienne notation qui n'est plus utilisée ?

7voto

Prateek Points 1508

>.> n'est pas défini par défaut, mais vous pouvez le définir vous-même :

infixl 9  >.>
(>.>) = flip (.)

ou de manière équivalente,

infixl 9  >.>
f >.> g = g . f

(J'ai donné la déclaration de fixité sur la base de la infixr 9 . dans le Prélude .)

6voto

KennyTM Points 232647

C'est probablement juste une fonction définie par le livre (je n'ai pas lu le livre). AFAIK, >.> n'est utilisé nulle part. Vous pourriez le définir vous-même :

(>.>) = flip (.)

La notation de facto de ceci semble être (#) .

Puisque les fonctions sont flèches "Contrôle.Catégorie" vous pouvez également utiliser >>> par exemple

Prelude Control.Category> ((*2) . (+1)) 4
10
Prelude Control.Category> ((*2) <<< (+1)) 4
10
Prelude Control.Category> ((*2) >>> (+1)) 4
9
Prelude Control.Category> ((+1) >>> (*2)) 4
10

3voto

dblhelix Points 5042

(>.>) ne semble pas être défini dans les bibliothèques standard. Cependant, il existe (>>>) sur Control.Category qui se comporte de la même manière :

Prelude> :m + Control.Category
Prelude Control.Category> :i (>>>)
(>>>) :: Category cat => cat a b -> cat b c -> cat a c
    -- Defined in Control.Category
infixr 1 >>>
Prelude Control.Category> let f = (* 2) >>> (+ 3)
Prelude Control.Category> f 5
13

Notez que vous pouvez utiliser Hoogle pour comprendre ces choses.

En outre, vous pouvez bien sûr toujours définir vous-même un tel opérateur :

(>.>) :: (a -> b) -> (b -> c) -> (a -> c)
f >.> g = g . f

Ensuite, vous pourrez écrire :

Main*> ((* 2) >.> (+ 3)) 5
13

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