两个非仿函数可以组成一个仿函数吗?

Pet*_*lák 7 haskell composition functor category-theory applicative

我们可以有两种类型f, g :: * -> *,它们不是monad,但它们的组成是.例如对于任意固定s:

f a := s -> a
g a := (s, a)
Run Code Online (Sandbox Code Playgroud)

g a不是monad(除非我们限制s为monoid),但是f (g a)是monad状态s -> (s, a).(不同于仿函数和应用性函子,即使这两个fg是单子,它们的成分可能不是.)

仿函数或应用仿函数是否有类似的例子?即是,所述组合物fg是AA函子(或适用函子),即使

  1. 之一f并且g不是(应用性)函子,另一个是,或
  2. 它们都不是(应用)仿函数,

chi*_*chi 8

这不是(协变)仿函数

f x = x -> r
Run Code Online (Sandbox Code Playgroud)

但是f . f"延续"仿函数(也是一个monad):

f (f x) = (x -> r) -> r
Run Code Online (Sandbox Code Playgroud)

这可能不是最好的例子,因为它f是一个逆变函子.


lef*_*out 7

我们g :: *->*.然后Const A . g是任何的仿函数A,实际上是同构的Const A.