我试图编写一个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']]
答案 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)