在Haskell中导入数据类型

Mar*_*van 1 import haskell types module

我正在尝试将数据类型从一个文件导入到另一个文件.

这是模块:

-- datatype.hs
module DataType (Placeholder) where

data Placeholder a = Foo a | Bar | Baz deriving (Show)
Run Code Online (Sandbox Code Playgroud)

这是使用该模块的文件

-- execution.hs
import DataType (Placeholder)

main = do
    print Bar
Run Code Online (Sandbox Code Playgroud)

当我跑步时,runhaskell execution.hs我得到了

execution.hs:4:10: Not in scope: data constructor ‘Bar’
Run Code Online (Sandbox Code Playgroud)

我的代码可能存在多个问题,那么构建此代码的最佳方法是什么,以便我从模块导入特定的数据类型并能够查看它?

zig*_*zou 7

您必须导入/导出类和构造函数:

在你的情况下,PlaceHolder是类,Foo并且Bar是构造函数.

因此,你应该写:

-- datatype.hs
module DataType (PlaceHolder (Foo, Bar, Baz)) where

-- execution.hs
import DataType (PlaceHolder (Foo, Bar, Baz))
Run Code Online (Sandbox Code Playgroud)

或者更简单:

-- datatype.hs
module DataType (PlaceHolder (..)) where

-- execution.hs
import DataType (PlaceHolder (..))
Run Code Online (Sandbox Code Playgroud)

如果您没有指定导出的内容:

-- datatype.hs
module DataType where
Run Code Online (Sandbox Code Playgroud)

一切都将被导出(类,构造函数,函数......).

如果您未指定导入的内容

-- execution.hs
import DataType
Run Code Online (Sandbox Code Playgroud)

DataType出口的一切都将可用.

指定进口和出口通常是一种很好的做法.