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

1 haskell functional-programming

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

`Char' is applied to too many type arguments
In the type signature for `vowels': vowels :: Char a => a -> a
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

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

Lee*_*Lee 6

你的类型签名应该是

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

要么

vowels :: String -> String
Run Code Online (Sandbox Code Playgroud)

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

  • @ user3334838你似乎把类型与类型混淆.当你看到像'Eq a => a - > a - > Bool`这样的东西时,*它不是与Eq - > Eq - > Bool`相同的东西 - 后者是一个错误,而不是有效的Haskell代码.当你看到'Eq a`时,你应该阅读,"任何类型`a`是'Eq`类型类的成员." `Char`是*不是类型类,所以它不能有成员! (2认同)