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