Haskell模块没有编译

Sir*_*dez 0 haskell module

所以想象一下,如果我有这个模块声明

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)

bhe*_*ilr 5

您的代码格式不正确,您需要正确遵循空白约定,因为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)