想象一下,如果我有这个模块声明
module MyModule
(FavoriteList
,empty
,insert
,delete
)where
data FavoriteList a = L [a]
empty :: FavoriteList a
empty = FavoriteList []
由于某些原因超出了我在Haskell中的经验,这不会编译,有时它会说Data构造函数不在范围内,当我在代码中移动它时,它表示在空函数的输入中存在解析错误。 有什么帮助吗?
编辑:
)where
data FavoriteList a = L [a]
empty :: FavoriteList a
empty = FavoriteList []
答案 0 :(得分:5)
您的代码格式不正确,您需要正确遵循空白约定,因为Haskell编译器是空白感知的。这样的事情应该有效:
module MyModule
( FavoriteList(..)
, empty
) where
data FavoriteList a = L [a]
empty :: FavoriteList a
empty = L []
您应该使用FavoriteList(..)
形式导出类型及其所有构造函数,FavoriteList
的构造函数是L
,而不是FavoriteList
,这是类型name,因此您必须使用FavoriteList
构造函数构造L
类型的值。
所有顶级声明也必须处于相同的缩进级别,因此您无法
data FavoriteList a = L [a]
empty :: FavoriteList a
empty = L []
你必须
data FavoriteList a = L [a]
empty :: FavoriteList a
empty = L []
答案 1 :(得分:2)
由于where
是一个阻止先行者,所以后面的所有行必须缩进相同的数量(或必须使用显式{;}
)。