У меня есть следующая функция в Haskell
agreeLen :: (Eq a) => [a] -> [a] -> Int
agreeLen x y = length $ takeWhile (\(a,b) -> a == b) (zip x y)
Я пытаюсь научиться писать "идиоматический" Haskell, который, по-видимому, предпочитает использовать .
и $
вместо круглых скобок, а также, если это возможно, предпочитает код без кода. Я просто не могу избавиться от явного упоминания x
и y
. Есть идеи?
Я думаю, что у меня будет такая же проблема с pointfreeing любой функцией из двух аргументов.
Кстати, это просто стремление писать хороший код; а не "использовать все, что нужно, чтобы сделать это беспроблемным" домашним упражнением.
Спасибо.
(Добавлен комментарий) Спасибо за ответы. Вы убедили меня, что эта функция не приносит пользы от pointfree. И вы также дали мне отличные примеры для практики трансформации выражений. Мне все еще сложно, и они кажутся столь же важными для Haskell, что и указатели на C.