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 []