2010-08-19 47 views
4

我在Haskell編寫我的第一個大項目,我想將它分割成多個文件。到目前爲止,我已經寫了兩個模塊,ParseEval。我想要一個Main模塊,它只包含這兩個模塊並指定main函數。我有文件Main.hsParse.hsEval.hsMain導入,但出現這種情況:Haskell中的多個源文件

Prelude> :load "~/code/haskell/lisp/Main.hs" 
[1 of 3] Compiling Eval    (Eval.hs, interpreted) 
[2 of 3] Compiling Parse   (Parse.hs, interpreted) 
[3 of 3] Compiling Main    (~/code/haskell/lisp/Main.hs, interpreted) 
Ok, modules loaded: Main, Parse, Eval. 
*Main> parse parseExpr "" "#b101" 

<interactive>:1:0: Not in scope: `parse' 

parse功能來自秒差距庫,該庫在Parse.hs進口。怎麼了?

回答

4

Haskell report

模塊實現可能僅 出口,它宣佈它從其他 模塊導入實體,或 。如果省略導出列表,則 模塊中定義的所有值 都被導出,,而不是 導入的那些

要麼你需要給包括在Parse.hsparse明確導出列表,或在您的Main.hs再次導入parse

1

你也可以這樣做:

module Parse (parse) where 
    import qualified Text.ParserCombinators.Parsec as P 

    parse = P.parse 

不過說真的,這是沒用的。在從其中一個模塊導出之前,您一定希望在Parsec之上構建更多特定於域的內容。