Haskell正确使用多个参数

时间:2015-05-30 15:56:54

标签: haskell

我正在尝试创建自己的“Set”数据类型,当我尝试声明一个insert函数时,编译器会抱怨参数太少:

quantities.hs:12:27:
Expecting one more argument to `Set'
In the type signature for `insert': insert :: Set e -> Int -> Set

如何正确定义插入函数以向我的集添加新元素?

这是我到目前为止所做的:

data Set e = Set [e]

mySet :: Set Int
mySet = Set [1, 2, 3, 4, 5]

setLength :: Set e -> Int
setLength (Set s) = length s

empty :: Set e -> Bool
empty (Set s) = if null s then True else False

insert :: Set e -> Int -> Set
insert set value = set : value

main = do print(insert mySet 1)

1 个答案:

答案 0 :(得分:3)

您必须按如下方式实施insert。请注意您的类型签名不正确。您无法将Int插入到Set e类型的集合中(您只能将Int插入Set Int类型的集合中。

insert :: Set e -> e -> Set e
insert (Set s) value = Set $ value : s

请注意,上述insert没有考虑重复的元素(提示:使用nub来消除它)。