`字符'适用于太多类型的参数

时间:2014-05-12 20:44:25

标签: haskell functional-programming

我试图编写一个haskell程序,它接受一个字符串并返回一个只包含元音的新字符串,但我收到了这个错误。

`Char' is applied to too many type arguments
In the type signature for `vowels': vowels :: Char a => a -> a

这是我的代码:

vowels :: (Char a) => a -> a
vowels str = [ x | x <- str, x `elem` ['A','E','I','U','Y','O']]

2 个答案:

答案 0 :(得分:6)

您的类型签名应为

vowels :: [Char] -> [Char]
vowels str = [ x | x <- str, x `elem` ['A','E','I','U','Y','O']]

vowels :: String -> String

在您的代码中,(Char a) => ...表示类型a应该是类型类Char的实例。但是,Char是一种数据类型,而不是类型类,这就是您收到错误的原因。由于您不需要任何类来实现此功能,因此您可以删除约束。

答案 1 :(得分:0)

这是你想要实现的目标吗?

vowels :: String -> [Char]
vowels = let
             y =  ['A','a','E','e','I','i','U','u','Y','y','O',o']
         in filter.(\x -> elem x y)