A partir de GHCI version 8.0.1 , let
n'est plus nécessaire pour définir des fonctions sur le REPL.
Cela devrait donc fonctionner correctement pour vous :
: addTwo x y = x + y
: addTwo 1 2
3
: :t addTwo
addTwo :: Num a => a -> a -> a
L'inférence de type de Haskell fournit un typage généralisé qui fonctionne également pour les flottants :
: addTwo 2.0 1.0
3.0
Si vous devez fournir votre propre typage, il semble que vous deviez utiliser let
combiné avec une entrée multiligne (utiliser :set +m
pour activer l'entrée multiligne dans GHCI) :
: let addTwo :: Int -> Int -> Int
| addTwo x y = x + y
|
: addTwo 1 2
3
Mais vous obtiendrez des erreurs si vous essayez de passer autre chose qu'un Int
à cause de votre typage non polymorphe :
: addTwo 2.0 1.0
<interactive>:34:8: error:
• No instance for (Fractional Int) arising from the literal ‘2.0’
• In the first argument of ‘addTwo’, namely ‘2.0’
In the expression: addTwo 2.0 1.0
In an equation for ‘it’: it = addTwo 2.0 1.0
2 votes
Duplicata possible de Comment définir une fonction dans ghci sur plusieurs lignes ?