Начиная с GHCI версии 8.0.1 , let
больше не требуется для определения функций в REPL.
Так что это должно работать для вас:
λ: addTwo x y = x + y
λ: addTwo 1 2
3
λ: :t addTwo
addTwo :: Num a => a -> a -> a
Вывод типа в Haskell обеспечивает обобщенную типизацию, которая работает и для чисел с плавающей запятой:
λ: addTwo 2.0 1.0
3.0
Если вы должны предоставить свою собственную типизацию, вам, вероятно, придется использовать let
в сочетании с многострочным вводом(используйте :set +m
для включения многострочного ввода в GHCI):
λ: let addTwo :: Int -> Int -> Int
| addTwo x y = x + y
|
λ: addTwo 1 2
3
Но вы получите ошибки, если попытаетесь передать что-либо кроме Int
из-за вашей неполиморфной типизации:
λ: 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