【发布时间】:2019-10-20 17:47:19
【问题描述】:
我在ghci中输入了一些代码,类似这样:
main = do { a <- getLine ; let b = "Hello " ++ a ; putStrLn b }
但是,我收到此错误:
<interactive>:1:63: error: parse error on input `}'
在以前的 Haskell/GHC 版本中,我记得这工作得很好 - 甚至明确表示,在 do 块中,您不需要 in 关键字。然而,让它发挥作用的唯一方法似乎是:
main = do { a <- getLine ; let b = "Hello " ++ a in putStrLn b }
不会产生此错误。
这个被删除了吗?如果是这样,我是否需要在 let in 表达式中添加第二个 do 块?
【问题讨论】:
-
main = do { a <- getLine ; let { b = "Hello " ++ a} ; putStrLn b }工作正常。 -
如果你不放大括号,我认为它会被解析为
do { a <- getLine ; let {b = "Hello " ++ a ; putStrLn b} }。毕竟,do { a <- getLine ; let {b = "Hello " ++ a ; putStrLn b = ()} ; print 3 }将是合法代码。
标签: haskell syntax monads let do-notation