Какой прикладной функтор используется для передачи общих параметров?

Мне кажется, я понимаю, как работают аппликативные функторы в Haskell, и использую их для базовых типов данных (Maybe, Either...). Однако, я нашел этот вопрос со следующим примером:

withPool pool = bracket (takeConn pool) (putConn pool)

можно переписать в аппликативном стиле:

withPool = bracket <$> takeConn <*> putConn

Я был удивлен, что он скомпилировался и действительно работает, как ожидалось, но может ли кто-нибудь сказать мне, какой аппликативный функтор используется для этого и как он определяется?

Обновление: я думаю, что понял, как это работает, но я понятия не имею, где он определяется.

15
задан Community 23 May 2017 в 12:03
поделиться