2015-12-18 120 views
0

我試圖從一個文件導入數據類型到另一個文件。在Haskell中導入數據類型

這裏的模塊:

-- datatype.hs 
module DataType (Placeholder) where 

data Placeholder a = Foo a | Bar | Baz deriving (Show) 

這裏的消費模塊

-- execution.hs 
import DataType (Placeholder) 

main = do 
    print Bar 

文件當我運行runhaskell execution.hs我得到

execution.hs:4:10: Not in scope: data constructor ‘Bar’ 

可能存在多個問題,我的代碼,那麼構造這個的最好方法是什麼,以便我導入一個特定的數據類型fr om模塊並能夠查看它?

回答

6

你要導入/導出類和構造函數:

在你的情況,PlaceHolder是類和FooBar是構造函數。

因此,你應該寫:

-- datatype.hs 
module DataType (PlaceHolder (Foo, Bar, Baz)) where 

-- execution.hs 
import DataType (PlaceHolder (Foo, Bar, Baz)) 

或者簡單:

-- datatype.hs 
module DataType (PlaceHolder (..)) where 

-- execution.hs 
import DataType (PlaceHolder (..)) 

如果不指定導出的內容:

-- datatype.hs 
module DataType where 

一切都將被導出(類,構造函數,函數...)。

如果不指定哪些導入

-- execution.hs 
import DataType 

一切DataType出口將可用。

指定導入和導出通常是一種很好的做法。