Ceci est a follow up to a previous question: I got an answer I didn't really understand and accepted. Je vais donc demander à nouveau:Signatures de type explicite pour les types polymorphes. Partie II
Je ne comprends toujours pas comment cela est logique:
type Parse a b = [a] -> [(b,[a])]
build :: Parse a b -> (b -> c) -> Parse a c
build p f inp = [ (f x, rem) | (x, rem) <- p inp ]
Maintenant, évidemment, p
se fixe au premier argument de type Parse a b
. Et, évidemment, f
se lie au deuxième argument (b -> c)
. Ma question reste: à quoi correspond inp
?
Si Parse a b
est synonyme de type pour [a] -> [(b,[a])]
je pensais à la dernière question que je pouvais le remplacer:
build :: [a] -> [(b,[a])] -> (b -> c) -> [a] -> [(c,[a])]
Cependant, je ne vois pas que aucun sens soit à la définition:
build p f inp = [ (f x, rem) | (x, rem) <- p inp ]
Quelqu'un pease aide à expliquer les synonymes de type.
Réponses en son surround 4 points! – luqui