函数者和单子之间的区别是什么? [英] What is the difference between a Functor and a Monad?

查看:19
本文介绍了函数者和单子之间的区别是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这里有类似的问题,但它们与特定的编程语言有关,我正在寻找概念级别的答案。

据我所知,函数器本质上是不变的容器,它公开派生另一个函数器的map()API。哪项添加使将特定的函数器称为单体成为可能?

据我所知,每个单子都是函子,但并不是每个函子都是单子。

推荐答案

(请注意,这将是对范畴理论概念的简化解释)

函数器

函数器是从一组值a到另一组值a -> b的函数。对于编程语言,这可能是来自String -> Integer

的函数

function fn(text: string) : integer

组成

合成是指使用一个函数的值作为下一个函数的值的输入:fa(fb(x))。例如:

hash(lowercase(text))

单数

Monad允许合成以其他方式无法合成的函数器,或通过在合成中添加额外功能来合成函数器,或者两者兼而有之。

  • 第一个示例是函数器的MonadString -> (String, Integer)

  • 第二个示例是对值调用的函数数进行计数的Monad

Monad包括负责所需功能的函数器T以及另外两个函数:

  • input -> T(input)
  • T(T(input)) -> T(input)

第一个函数允许将您的输入值转换为Monad可以组合的一组值。第二个函数允许进行合成。

因此,总而言之,每个Monad不是函数器,而是使用函数器来完成其目的。

这篇关于函数者和单子之间的区别是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆