haskell - `join` 也是 endofunctor 的函数?
问题描述
每个单子都是一个内函子。
bind
monad 是fmap
和的组合join
。
fmap
是内函子的函数。
那么,是否可以肯定地说它join
也是 endofunctor 的函数?
解决方案
endofunctor 是一对映射:一个将一个类型映射到另一个类型,一个将一个函数映射到另一个函数。从这个意义上说,内函子“有” fmap
,就像fmap
函数到函数的映射一样。
单子是由一个内函子和两个自然变换组成的三元组。自然变换之一是return :: a -> m a
. 另一个在 Haskell 中是(>>=) :: m a -> (a -> m b) -> m b
. join ms = ms >>= id
,但我们可以很容易地说那join :: m (m a) -> m a
是与 monad 相关的自然转换m >>= f = join (fmap f m)
。在这种情况下,monad(不是 endofunctor)“具有”join
作为函数。
推荐阅读
- r - 如何过滤具有一列条件的数据?
- javascript - 如何将参数传递给 Vue 组件以启动组件实例
- app-inventor - 麻省理工学院应用程序发明者如何保存正在进行中的游戏
- ruby-on-rails - 在 Rails 中的数据库访问之前插入中间件
- protocols - 编写一个重要的 Wireshark Dissector
- c++ - 当我们必须从选项中选择一个时,这是在 C++ 中做出选择的正确方法吗?
- pine-script - 松树编辑器中 TradingView 的“未声明的标识符”错误
- android - 如何将安全参数与 MPP 可序列化数据一起使用
- ios - 使用 AVMutableComposition 合并视频
- angular - ngDoCheck 的 Angular 替代品,用于检测服务中布尔值的变化?