我正在尝试将数据类型从一个文件导入到另一个文件.
这是模块:
-- datatype.hs module DataType (Placeholder) where data Placeholder a = Foo a | Bar | Baz deriving (Show)
这是使用该模块的文件
-- execution.hs import DataType (Placeholder) main = do print Bar
当我跑步时,runhaskell execution.hs
我得到了
execution.hs:4:10: Not in scope: data constructor ‘Bar’
我的代码可能存在多个问题,那么构建此代码的最佳方法是什么,以便我从模块导入特定的数据类型并能够查看它?
您必须导入/导出类和构造函数:
在你的情况下,PlaceHolder
是类,Foo
并且Bar
是构造函数.
因此,你应该写:
-- datatype.hs module DataType (PlaceHolder (Foo, Bar, Baz)) where -- execution.hs import DataType (PlaceHolder (Foo, Bar, Baz))
或者更简单:
-- datatype.hs module DataType (PlaceHolder (..)) where -- execution.hs import DataType (PlaceHolder (..))
如果您没有指定导出的内容:
-- datatype.hs module DataType where
一切都将被导出(类,构造函数,函数......).
如果您未指定导入的内容
-- execution.hs import DataType
DataType
出口的一切都将可用.
指定进口和出口通常是一种很好的做法.