Haskell:输入`import'时解析错误

Oma*_*hab 2 haskell functional-programming

我试图重新创建此Haskell代码的输出:

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
Run Code Online (Sandbox Code Playgroud)

预期产量如下:

$ runhaskell for.hs
1
2
3
7
8
9
loop
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

 Test4.hs:2:1: parse error on input `import'
Run Code Online (Sandbox Code Playgroud)

什么是错误的想法?

dup*_*ode 6

Test4.hs:2:1: parse error on input `import'
Run Code Online (Sandbox Code Playgroud)

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

forM_ = flip mapM_
import Control.Monad.Cont
Run Code Online (Sandbox Code Playgroud)

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