Попытка справиться с действиями ввода-вывода

Я пытаюсь разобраться с действиями ввода-вывода. Интересно, почему это работает:

main = do
  alias = getLine
  name <- alias
  putStrLn ("your name is: " ++ name)

говоря

 parse error on input `='

person Community    schedule 27.09.2013    source источник


Ответы (1)


Добавить ключевое слово let

main = do
  let alias = getLine
  name <- alias
  putStrLn ("your name is: " ++ name)

do — это специальная конструкция для монадического оператора bind, а не cosmic space. Все, что вы записываете в блок do, на самом деле является цепочкой >>= монадических функций. Поэтому вы должны использовать конструкцию let. Но вы можете сделать псевдоним в другой части вашей программы.

alias = getLine

main = do
  name <- alias
  putStrLn ("your name is: " ++ name)
person Sergey Sosnin    schedule 27.09.2013
comment
+1 за космическое пространство. Это стандарт, к которому я буду стремиться в своем коде на Haskell в будущем. - person Daniel Wagner; 27.09.2013