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

zer*_*iel 11 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
Run Code Online (Sandbox Code Playgroud)

我的档案file.hs:

import Test

some_func = test_f
Run Code Online (Sandbox Code Playgroud)

如果我在翻译中写作没有错误:

> :l Test
> test_f T
T
Run Code Online (Sandbox Code Playgroud)

在解释器中我正在尝试执行some_func T,但是有一个错误.如何Test_Data在我的文件中使用类来描述注释?

bhe*_*ilr 12

您没有从模块中导出它:

module Test (test_f, Test_Data(..)) where
Run Code Online (Sandbox Code Playgroud)

(..)部分说"导出所有构造函数TestData".


kos*_*kus 11

您的模块中有一个显式的导出列表Test:

module Test (test_f) where
Run Code Online (Sandbox Code Playgroud)

导出列表(test_f)表明您要导出该函数test_f而不是其他任何内容.特别是,数据类型Test_Data及其构造函数是隐藏的.

要解决此问题,请删除导出列表,如下所示:

module Test where
Run Code Online (Sandbox Code Playgroud)

现在所有的东西都会被出口.

或者将数据类型及其构造函数添加到导出列表,如下所示:

module Test (test_f, Test_Data(..)) where
Run Code Online (Sandbox Code Playgroud)

该表示法Test_Data(..)导出具有所有相应构造函数的数据类型.