2011-10-18 2 views
21

Quelle est la fixité des opérateurs backtick?Fixité des opérateurs backtick?

Par exemple, dans ce code de Real World Haskell:

ghci> (1+) `fmap` [1,2,3] ++ [4,5,6] 
[2,3,4,4,5,6] 

Il est évident que l'opérateur backtick `fmap` a une fixité supérieure à ++, mais none is given by GHCi.

+1

@ dabe4420 BTW, Le bug affecte uniquement les déclarations de fixité sur les fonctions qui sont définies sur le REPL. Comparez quelque chose comme «f» \ 'elem \' «abc» ++ «ijk» 'qui fonctionne bien. – fuz

Répondre

21

§4.4.2 de the Haskell Report affirme que

Tout opérateur manque une déclaration de fixité est supposée être infixl 9

« Tout opérateur » comprend les noms de fonctions normales dans les apostrophes inverses.

Votre exemple montre que `fmap` n'ont fixité supérieur à ++, car ++ agit sur le résultat de la fmap.

+4

Il est important de mentionner que vous pouvez spécifier la fixité pour de tels opérateurs. Par exemple, '1 + 2 \' const \ '5 = 3', mais' 1 + 2 \ 'div \' 5 = 1'. – Rotsor

+4

@Rotsor: Votre exemple n'est pas un exemple car la valeur de l'expression '1 + 2 \' const \ '5' serait 3 même si la fixité de' \ 'const \' 'était semblable à celle de' \ 'div \ ''. –

+4

Oh, comment pourrais-je? '2 \' div \ '1^2 = 2' et' 2 \ 'const \' 1^2 = 4' sont des exemples. – Rotsor