2014-03-05 52 views
11

我在Haskell中編寫了一些簡單的模塊,然後在其他文件中使用import。然後我試圖從我的模塊中使用數據構造函數的功能 - 有一個錯誤Not in scope: data constructor: <value>。我該如何解決它?Haskell錯誤不在範圍內:數據構造函數

注意:當我在導入後在解釋器中使用它時 - 一切都很好,沒有錯誤。

我模塊Test.hs

module Test (test_f) where 
data Test_Data = T|U|F deriving (Show, Eq) 

test_f x 
    | x == T = T 
    | otherwise = F 

我的文件file.hs

import Test 

some_func = test_f 

沒有錯誤,如果我在翻譯正在寫:

> :l Test 
> test_f T 
T 

在解釋我想執行some_func T,但出現錯誤。如何在我的文件中使用類Test_Data來描述註釋?

回答

12

你是不是從你的模塊將其導出:

module Test (test_f, Test_Data(..)) where 

(..)部分寫着「導出所有構造函數TestData」。

11

你的模塊Test中有明確的導出列表:

module Test (test_f) where 

導出列表(test_f)要導出功能test_f,沒有別的國家。特別是,數據類型Test_Data及其構造函數是隱藏的。

爲了解決這個問題,要麼刪除導出列表如下:

module Test where 

現在,所有的東西都會被導出。

或添加數據類型和它的構造函數來導出列表如下:

module Test (test_f, Test_Data(..)) where 

的符號Test_Data(..)出口數據類型與所有相應的構造函數。