我在Haskell中编写了一些简单的模块,然后在其他文件中编写了import
。然后我试图使用我的模块中的数据构造函数 - 有一个错误Not in scope: data constructor: <value>
。我该如何解决?
注意:导入后我在解释器中使用它时 - 一切都没有错误。
我的模块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
来描述注释?
答案 0 :(得分:12)
您没有从模块中导出它:
module Test (test_f, Test_Data(..)) where
(..)
部分说“导出TestData
的所有构造函数”。
答案 1 :(得分: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(..)
导出具有所有相应构造函数的数据类型。