2016-11-07 46 views
2

我試圖重新的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' 

任何有關錯誤的想法?

+5

進口應在任何其他定義之前。該帖子中的'forM_ = flip mapM_'行不是代碼的一部分,因此只需將其刪除即可。 – duplode

+1

@duplode這是一個答案,而不是評論! –

+1

另外,我反對接近票數:這是非常可重複的,而不是一個錯字。這對我來說似乎是一個完美的(如果很簡單)問題。 –

回答

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

錯誤指向文件的第二行。引用前兩行:

forM_ = flip mapM_ 
import Control.Monad.Cont 

的問題是,進口報關單必須是在一個模塊開始,之前的任何定義(即可以在導入之前進來的唯一的東西是語言編譯指示,如使用啓用GHC擴展和模塊聲明)。在你的情況下,文件的第一行是一個定義,因此第二行中錯位的導入聲明會導致解析錯誤。由於第一行實際上並不是您鏈接到的帖子中代碼段的一部分,因此您可以簡單地將其刪除。