Haskell模块未编译
想象一下,如果我有这个模块声明Haskell模块未编译,haskell,module,Haskell,Module,想象一下,如果我有这个模块声明 module MyModule (FavoriteList ,empty ,insert ,delete )where data FavoriteList a = L [a] empty :: FavoriteList a empty = FavoriteList [] 由于某种原因,这超出了我在Haskell中的经验,它没有编译,有时它说数据构造函数不在范围内,当我在代码中移动它时,它说空函数的输入中存在解析错误。 有什么帮助吗 编辑: 由于其中是块预告符
module MyModule
(FavoriteList
,empty
,insert
,delete
)where
data FavoriteList a = L [a]
empty :: FavoriteList a
empty = FavoriteList []
由于某种原因,这超出了我在Haskell中的经验,它没有编译,有时它说数据构造函数不在范围内,当我在代码中移动它时,它说空函数的输入中存在解析错误。
有什么帮助吗
编辑:
由于
其中
是块预告符,它后面的所有行都必须缩进相同的量(或者必须使用显式的{;}
。您的代码格式不好,您需要正确遵循空格约定,因为Haskell编译器可以识别空格。像这样的方法应该会奏效:
module MyModule
( FavoriteList(..)
, empty
) where
data FavoriteList a = L [a]
empty :: FavoriteList a
empty = L []
您应该使用表单FavoriteList(..)
导出类型及其所有构造函数,FavoriteList
的构造函数是L
,而不是FavoriteList
,后者是类型名称,因此您必须使用L
构造函数构造类型为FavoriteList
的值
所有顶级声明也必须处于同一缩进级别,因此不能有
data FavoriteList a = L [a]
empty :: FavoriteList a
empty = L []
你必须
data FavoriteList a = L [a]
empty :: FavoriteList a
empty = L []
感谢您对代码中的问题的完整解答,非常感谢,并感谢(…)提示。它是根据你提供的识别来工作的。因为这回答了你的问题,所以习惯上把它标记为被接受的答案。
data FavoriteList a = L [a]
empty :: FavoriteList a
empty = L []