Вы можете попробовать инфиксную форму
add 1 $ subtract 2 4 `add` subtract 8 16
РЕДАКТИРОВАТЬ
Есть другой способ.
Давайте определим:
newtype W a = W { w :: a }
pure' = W
(.$.) :: W (a -> b) -> a -> W b
(.$.) (W a) b = W $ a b
и используемую операцию, например
plus :: Int -> Int -> Int
plus = (+)
Тогда мы можем сделать следующее
foo :: Int
foo = w $ pure' plus .$. plus 1 2 .$. 2
Это в основномаппликативный функтор (вы можете найти его в качестве примера) только с разными именами.
Вы ставите перед операцией префикс w $ pure'
, а отдельные аргументы - .$.
.