【发布时间】:2013-10-31 00:14:30
【问题描述】:
我需要有关以下错误的帮助。基本上对于给定的项目列表,我想创建一个函数来检查项目是否在该列表中。为了做到这一点,我将列表变成一个集合,然后围绕该集合创建一个闭包。
toAccept :: Ord a => [a] -> (a -> Bool)
toAccept xs =
let xset = Set.fromList xs in
let
-- accept:: Ord a => a -> Bool
accept x = Set.member xset x in
accept
我得到的是
Could not deduce (a ~ Set.Set (Set.Set a))
from the context (Ord a)
bound by the type signature for
toAccept :: Ord a => [a] -> a -> Bool
at Tokens.hs:6:13-39
`a' is a rigid type variable bound by
the type signature for toAccept :: Ord a => [a] -> a -> Bool
at Tokens.hs:6:13
Expected type: a -> Bool
Actual type: Set.Set (Set.Set a) -> Bool
In the expression: accept
In the expression: let accept x = Set.member xset x in accept
In the expression:
let xset = Set.fromList xs in
let accept x = Set.member xset x in accept
我做错了什么?
【问题讨论】:
-
member中的参数顺序倒数。 -
该死!那是愚蠢的。谢谢...
-
我也希望你知道
elem。 -
@n.m.如果他查询很多元素
elem是O(n)每个查询但toAccept在构造期间是O(n)但每个查询只有O(log(n))。 -
您也可以将最后四行替换为
(`Set.member` xset)。
标签: haskell