Haskell:输入`import'

时间:2016-11-07 18:30:54

标签: haskell functional-programming

我正在尝试重新创建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'

关于出了什么问题的任何想法?

1 个答案:

答案 0 :(得分:6)

Test4.hs:2:1: parse error on input `import'

错误指向文件的第二行。引用前两行:

forM_ = flip mapM_
import Control.Monad.Cont

问题是导入声明必须在模块的开头,在任何定义之前(导入之前可能出现的唯一事情是语言编译指示,例如用于启用GHC扩展的那些,以及模块声明) 。在您的情况下,文件的第一行是一个定义,因此第二行中错误放置的导入声明会导致解析错误。由于第一行实际上并不是您链接的帖子中代码段的一部分,因此您只需将其删除即可。