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