Дан правильный, но :{
и :}
должны отображаться в отдельной строке:
> :{
> let foo a b = a +
> b
> :}
> :t foo
foo :: (Num a) => a -> a -> a
Это также взаимодействует с правилом макета, поэтому при использовании нотации может быть проще использовать явные скобки и точки с запятой. Например, это определение не выполняется:
> :{
| let prRev = do
| inp <- getLine
| putStrLn $ reverse inp
| :}
<interactive>:1:18:
The last statement in a 'do' construct must be an expression
Но это работает, когда добавляются скобки и точки с запятой:
> :{
| let prRev = do {
| inp <- getLine;
| putStrLn $ reverse inp;
| }
| :}
> :t prRev
prRev :: IO ()
Это будет действительно иметь значение только при вставке определений из файла, где может измениться отступ.