我们可以有两种类型f, g :: * -> *
这样它们不是单子(monad),但它们的组成是。例如对于任意固定 s
:
f a := s -> a
g a := (s, a)
g a
不是单子(monad)(除非我们将 s
限制为幺半群),而是 f (g a)
是状态单子(monad)s -> (s, a)
. (不像仿函数和应用仿函数,即使 f
和 g
都是单子(monad),their composition might not be。)仿函数或应用仿函数有类似的例子吗?那就是
f
的组成和 g
是一个仿函数(或应用仿函数),即使f
之一和 g
不是(应用)仿函数,另一个是,或最佳答案
这不是(协变)仿函数
f x = x -> r
但是
f . f
是“延续”仿函数(也是一个单子(monad)):f (f x) = (x -> r) -> r
这可能不是最好的例子,因为
f
是一个逆变仿函数。
关于haskell - 两个非仿函数可以组成一个仿函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25958042/