Я пытаюсь η-уменьшить функцию
foldr :: (a -> b -> b) -> b -> BinaryTree a -> b
foldr combiner base tree = foldMap combiner tree base where
foldMap = ...
при
foldMap :: (a -> b -> b) -> BinaryTree a -> b -> b
, работающем по назначению.
Я уменьшил η
foldr combiner base tree = foldMap combiner tree base
до
foldr combiner = flip $ foldMap combiner where
...
Это работает как задумано.Кажется, что я должен быть в состоянии η-уменьшить полностью, чтобы получить функцию без точек
foldr = flip $ foldMap where
...
Однако, это вызывает ошибку компиляции
Couldn't match type ‘a -> b -> b’ with ‘BinaryTree t0’
Expected type: (a -> b -> b) -> b -> BinaryTree a -> b
Actual type: BinaryTree t0 -> (t0 -> b -> b) -> b -> b
Возможно ли η-уменьшить дальшеи если да, то как?