2013-11-14 5 views
3

Я новичок в Haskell, и я пытаюсь написать простую программу. Однако, при выполнении следующей программы:Haskell let синтаксис не работает

main = do 
    args <- getArgs 
    let w = read (args !! 0) :: Integer 
    in print w 

Я получаю сообщение об ошибке:

file.hs: 4: 5: ошибка разбора на входе `в

То же let синтаксис работает просто отлично за пределами do ...

Что я делаю неправильно?

ответ

5

Синтаксис let отличается, если внутри a do блок. Вам не нужна часть in, область переменной автоматически остальная часть блока do.

В вашем случае:

main = do 
    args <- getArgs 
    let w = read (args !! 0) :: Integer 
    print w 
+0

Спасибо. Для записи, что такое правило в точности? Когда мне нужно поставить 'in' и когда мне нужно опустить его? – Timwi

+1

Вы используете 'in' в' let'-as-an-expression и не 'in' в' do'-блоках. –

+4

Но обратите внимание, что выражения 'let' справедливы и в блоках' do', если они имеют совпадающий монадический тип. Возможно, бессмысленно, но вы можете включить в свой пример: 'let x = putStrLn« Hello world »in x' –

Смежные вопросы