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

标签 haskell composition functor applicative category-theory

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

f a := s -> a
g a := (s, a)
g a不是单子(monad)(除非我们将 s 限制为幺半群),而是 f (g a)是状态单子(monad)s -> (s, a) . (不像仿函数和应用仿函数,即使 fg 都是单子(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/

    相关文章:

    haskell - 不返回组合表达式的所有可能的一步归约

    haskell - receiveChan有超时功能吗?

    haskell - Cabal 无法安装软件包,因为它需要 cabal

    java - 不同类型的组合

    haskell - 为什么这些 Haskell 函数的推断类型不完全相同?

    scala - 在scala中的特征中初始化特征

    c++ - 简单 C++ 组合与继承示例的请求

    c++ - 通用 std::function 成员

    julia - 如何将 bang 字符添加到仿函数?

    haskell - 哪些 Haskell 仿函数等价于 Reader 仿函数