Оператор Haskell $ в практическом использовании - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь разобраться в выражениях на Haskell, используя оператор $.В частности, о том, как написать это в Haskell, используя оператор $ или другой, если требуется:

add 1 (add (subtract 2 4) (subtract 8 16))

Мне удалось удалить две парные группы, как в:

add 1 $ add (subtract 2 4) $ subtract 8 16

Но все еще нужноудалить последнюю пару.

Есть идеи?

1 Ответ

0 голосов
/ 02 октября 2018

Вы можете попробовать инфиксную форму

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', а отдельные аргументы - .$..

...