Могут ли два нефунктора составить функтор?

У нас может быть два типа f, g :: * -> *, так что они не монады, а их композиция. Например для произвольного фиксированного s:

f a := s -> a
g a := (s, a)

g a не является монадой (если мы не ограничиваем s моноидом), но f (g a) является монадой состояния s -> (s, a). (В отличие от функторов и аппликативных функторов, даже если и f, и g были монадами, их композиция может не быть.)

Есть ли аналогичный пример для функторов или аппликативных функторов? То есть композиция f и g является функтором (или аппликативным функтором), хотя

  1. один из f и g не является (аппликативным) функтором, а другой является, или
  2. ни один из них не является (аппликативным) функтором,

person Petr    schedule 21.09.2014    source источник
comment
Преобразователь ContT создает Functors и Applicatives, не требуя, чтобы преобразованная структура была 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.2014
comment
возможно, это не ответ, но всякий раз, когда F и G соединяются, вы получаете монаду в композиции.   -  person Philip JF    schedule 22.09.2014


Ответы (2)


Это не (ковариантный) функтор

f x = x -> r

но f . f - это функтор "продолжения" (тоже монада):

f (f x) = (x -> r) -> r

Вероятно, это не лучший пример, потому что f - контравариантный функтор.

person chi    schedule 21.09.2014
comment
Меня в основном интересуют ковариантные функторы, поэтому я не возражаю, если f контравариантен, пример в порядке. - person Petr; 21.09.2014
comment
Как вы думаете, можно ли найти пример, в котором f является функтором, а g - нет (а f . g есть)? - person Petr; 21.09.2014

Пусть g :: *->*. Тогда Const A . g - функтор для любого A, фактически изоморфный Const A.

person leftaroundabout    schedule 21.09.2014
comment
Тривиальные базовые случаи превращаются в неубедительные (контр-) примеры, но вот и все. - person leftaroundabout; 21.09.2014