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)
我的代码可能存在多个问题,那么构建此代码的最佳方法是什么,以便我从模块导入特定的数据类型并能够查看它?
您必须导入/导出类和构造函数:
在你的情况下,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
出口的一切都将可用.
指定进口和出口通常是一种很好的做法.