Синтаксис приложения функции в Haskell отличается от синтаксиса Java. В Haskell вы применяете функцию, просто помещая ее рядом с аргументом:
f x -- The function f applied to x
Приложение функции связывается слева, поэтому, когда вы пишете
not (any''' not (p) xs)
, компилятор читает что при применении any'''
к функции not
, функции p
и списку xs
, как если бы вы написали
not (((any''' not) p) xs)
, вы хотели написать
all''' p xs = not (any''' (\x -> not (p x)) xs)
Вы можете сократить это немного, используя оператор композиции, .
:
all''' p = not . any''' (not . p)
Обратите внимание, что если вы также определите any'''
для использования all'''
, то вы ' в конечном итоге с бесконечным l oop. Возможно, вы хотели определить его для использования «более ранней» версии?