Haskell对字符串的过滤函数

时间:2011-04-29 19:04:57

标签: haskell types filter

有没有办法在字符串上使用过滤器功能,这样:

filter (=="!") "!!some!!_!!string!!"

应输出"some_string"(上述情况)。现在我得到的是一个类型错误:

Couldn't match expected type `[Char]' against inferred type `Char'

如果我将第二个过滤器参数类型更改为[“!! some !! _ !! string !!”],则类型错误消失,但只输出一个空列表。 (不完全是我想要的)

我认为字符串是列表但显然是“!! !! !! !! !! !!”不被视为列表而是作为字符。

有人提示吗?

1 个答案:

答案 0 :(得分:10)

Prelude> filter (/='!') "!!some!!_!!string!!"
"some_string"

filter的类型为(a -> Bool) -> [a] -> [a]。由于第二个参数是String = [Char],意思是[a] = String = [Char],我们推断a必须是Char。因此,该函数必须将Char作为输入。因此,您需要使用'!',而不是"!"