В настоящее время я изучаю Haskell.Я пытаюсь написать функцию, которая дает два списка из n различных элементов, возвращает true, если один является перестановкой другого.Я делаю это как упражнение.
Я впервые написал это как:
isPermut :: (Eq a)=>[a]->[a]->Bool
isPermut u v = foldl (\acc x -> acc && (elem x u)) True v
Кажется, это работает.Я сейчас пытаюсь переписать его без лямбда-выражения.Поэтому я пытаюсь:
isPermut :: (Eq a)=>[a]->[a]->Bool
isPermut u v = foldl (&& (flip $ elem u)) True v
Это дает мне ошибку компиляции:
Couldn't match expected type `b0 -> Bool' with actual type `Bool'
Expected type: Bool -> b0 -> Bool
Actual type: Bool -> Bool
In the first argument of `foldl', namely `(&& (flip $ elem u))'
In the expression: foldl (&& (flip $ elem u)) True v
Что означает эта ошибка?Как правильно написать функцию без лямбды?Спасибо.