Haskell模块没有编译

时间:2015-11-25 15:26:11

标签: haskell module

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

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

2 个答案:

答案 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是一个阻止先行者,所以后面的所有行必须缩进相同的数量(或必须使用显式{;})。