У нас может быть два типа f, g :: * -> *
, так что они не монады, а их композиция. Например для произвольного фиксированного s
:
f a := s -> a
g a := (s, a)
g a
не является монадой (если мы не ограничиваем s
моноидом), но f (g a)
является монадой состояния s -> (s, a)
. (В отличие от функторов и аппликативных функторов, даже если и f
, и g
были монадами, их композиция может не быть.)
Есть ли аналогичный пример для функторов или аппликативных функторов? То есть композиция f
и g
является функтором (или аппликативным функтором), хотя
- один из
f
иg
не является (аппликативным) функтором, а другой является, или - ни один из них не является (аппликативным) функтором,
ContT
создаетFunctor
s иApplicative
s, не требуя, чтобы преобразованная структура былаFunctor
, но не строится композицией. hackage.haskell. org / package / transformers-0.4.1.0 / docs / Точно так же бесплатное приложениеAp
добавляетApplicative
поведение к любомуFunctor
, не требуя, чтобы оно былоApplicative
, но, опять же, не создается композицией. hackage.haskell.org/package/ бесплатно-4.9 / docs / - person Cirdec   schedule 21.09.2014F
иG
соединяются, вы получаете монаду в композиции. - person Philip JF   schedule 22.09.2014