Haskell错误不在范围内:数据构造函数

时间:2014-03-05 14:43:06

标签: haskell

我在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来描述注释?

2 个答案:

答案 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(..)导出具有所有相应构造函数的数据类型。