Je lis la programmation en Haskell par Graham Hutton et donne le code suivant au chapitre 13:Syntaxe de l'endroit où le bloc
import Control.Applicative
import Data.Char
{- some code omitted -}
newtype Parser a = P (String -> [(a, String)])
item :: Parser Char
item = P (\ input -> case input of
[] -> []
x:xs -> [(x,xs)])
three :: Parser (Char,Char)
three = pure g <*> item <*> item <*> item
where g a b c = (a,c)
Je vais avoir du mal à comprendre la dernière ligne
where g a b c = (a,c)
Je comprends que cette ligne existe parce que trois ont type Parser (Char, Char) mais que représente gabc? Comment g a b c est-il syntaxiquement valide? Je suis habitué à voir où dans des cas comme
f :: s -> (a,s)
f x = y
where y = ... x ...
où apparaissent chaque symbole x et y avant la déclaration où.