Выражение x == 'a'|'e'|'i'|'o'|'u'|' '
не имеет смысла, символ канала (|
) используется для охранников или при определении нескольких конструкторов данных для типа данных.
Замена |
на (||) :: Bool -> Bool -> Bool
тоже не поможет, поскольку 'e'
не является Bool
. Однако мы можем написать несколько условий:
consonant :: Char -> Bool
consonant x = not (x == 'a'<b>|| x ==</b> 'e'<b>|| x ==</b> 'i'<b>|| x ==</b>'o'<b>|| x ==</b>'u'<b>|| x ==</b>' ')
, или мы можем использовать elem :: (Eq a, Foldable f) => a -> f a -> Bool
:
consonant :: Char -> Bool
consonant = not . <b>flip elem "aeiou "</b>
, или мы можемиспользуйте оператор секционирования, как @ leftroundabout предлагает :
consonant :: Char -> Bool
consonant = not . <b>(`elem` "aeiou ")</b>
или выполните «переворачивание» себя с помощью переменной:
consonant :: Char -> Bool
consonant <b>x</b> = not (elem <b>x</b> "aeiou ")
Или мы можем сделатьиспользуйте notElem :: (Eq a, Foldable f) => a -> f a -> Bool
, который отменяет elem
:
consonant :: Char -> Bool
consonant = (<b>`notElem`</b> "aeiou ")