所以想象一下,如果我有这个模块声明
module MyModule
(FavoriteList
,empty
,insert
,delete
)where
data FavoriteList a = L [a]
empty :: FavoriteList a
empty = FavoriteList []
Run Code Online (Sandbox Code Playgroud)
出于某种原因,超出了我在Haskell中的经验,这不会编译,有时它会说Data构造函数不在范围内,当我在代码中移动它时,它表示在空函数的输入中存在解析错误.有帮助吗?
编辑:
)where
data FavoriteList a = L [a]
empty :: FavoriteList a
empty = FavoriteList []
Run Code Online (Sandbox Code Playgroud)
您的代码格式不正确,您需要正确遵循空白约定,因为Haskell编译器是空白感知的.这样的事情应该有效:
module MyModule
( FavoriteList(..)
, empty
) where
data FavoriteList a = L [a]
empty :: FavoriteList a
empty = L []
Run Code Online (Sandbox Code Playgroud)
您应该使用表单FavoriteList(..)导出类型及其所有构造函数,以及FavoriteListis 的构造函数,而L不是FavoriteList类型名称,因此您必须FavoriteList使用L构造函数构造类型的值.
所有顶级声明也必须处于相同的缩进级别,因此您不能拥有
data FavoriteList a = L [a]
empty :: FavoriteList a
empty = L []
Run Code Online (Sandbox Code Playgroud)
你必须有
data FavoriteList a = L [a]
empty :: FavoriteList a
empty = L []
Run Code Online (Sandbox Code Playgroud)