Мне кажется, я понимаю, как работают аппликативные функторы в Haskell, и использую их для базовых типов данных (Maybe, Either...). Однако, я нашел этот вопрос со следующим примером:
withPool pool = bracket (takeConn pool) (putConn pool)
можно переписать в аппликативном стиле:
withPool = bracket <$> takeConn <*> putConn
Я был удивлен, что он скомпилировался и действительно работает, как ожидалось, но может ли кто-нибудь сказать мне, какой аппликативный функтор используется для этого и как он определяется?
Обновление: я думаю, что понял, как это работает, но я понятия не имею, где он определяется.