我正在尝试创建自己的“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)
答案 0 :(得分:3)
您必须按如下方式实施insert
。请注意您的类型签名不正确。您无法将Int
插入到Set e
类型的集合中(您只能将Int
插入Set Int
类型的集合中。
insert :: Set e -> e -> Set e
insert (Set s) value = Set $ value : s
请注意,上述insert
没有考虑重复的元素(提示:使用nub
来消除它)。