我正在尝试重新创建this Haskell code的输出:
forM_ = flip mapM_
import Control.Monad.Cont
main = do
forM_ [1..3] $ \i -> do
print i
forM_ [7..9] $ \j -> do
print j
withBreak $ \break ->
forM_ [1..] $ \_ -> do
p "loop"
break ()
where
withBreak = (`runContT` return) . callCC
p = liftIO . putStrLn
预期输出如下:
$ runhaskell for.hs
1
2
3
7
8
9
loop
但是我收到以下错误:
Test4.hs:2:1: parse error on input `import'
关于出了什么问题的任何想法?
答案 0 :(得分:6)
Test4.hs:2:1: parse error on input `import'
错误指向文件的第二行。引用前两行:
forM_ = flip mapM_
import Control.Monad.Cont
问题是导入声明必须在模块的开头,在任何定义之前(导入之前可能出现的唯一事情是语言编译指示,例如用于启用GHC扩展的那些,以及模块声明) 。在您的情况下,文件的第一行是一个定义,因此第二行中错误放置的导入声明会导致解析错误。由于第一行实际上并不是您链接的帖子中代码段的一部分,因此您只需将其删除即可。