当前位置: 首页 > 知识库问答 >
问题:

我们为什么需要单子?

洪宇定
2023-03-14

以我的拙见,关于“什么是单子”这个著名问题的答案,尤其是投票最多的答案,试图解释什么是单子,而没有明确解释为什么单子是真正必要的。它们能被解释为一个问题的解决方案吗?

共有1个答案

梁昊天
2023-03-14

>

  • 我们只想使用函数编程。(毕竟是“函数式编程(FP)”)。
  • 那么,我们有了第一个大问题。这是一个程序

    f(x)=2*x

    G(x,y)=x/y

    解决方案:让我们创建一个要返回的新类型的数据,一个“装箱类型”,它可能包含一个真实的或简单的无。因此,我们可以有g:Real,real->也许Real。好吧,但是...

    现在F(g(x,y))会发生什么?F尚未准备好使用可能是真正的。而且,我们不想改变我们可以与G连接的每个函数来使用可能是真实的

    解决方案:让我们有一个特殊的函数来“连接”/“组合”/“链接”函数。这样,我们就可以在幕后调整一个函数的输出,以满足下一个函数的需求。

    使用该技术可以解决的显著问题有:

    >

  • 具有函数序列(“程序”)中的每个函数都可以共享的全局状态:solutionstatemonad

    我们不喜欢“不纯函数”:对于相同的输入产生不同输出的函数。因此,让我们标记这些函数,使它们返回一个标记/装箱的值:iomonad。

  •  类似资料:
    • 问题内容: Angular应用使用属性而不是事件。 为什么是这样? 问题答案: ng-click包含一个角度表达式。Angular表达式是在Angular 范围的上下文中求值的,该范围绑定到具有ng- click属性的元素或该元素的祖先。 Angular表达式语言不包含流控制语句,也不能声明变量或定义函数。这些限制意味着模板只能访问由控制器或指令提供的变量和运行功能。

    • 为什么我们需要字典? 计算机最适合使用数字,而人类最适合使用姓名。我们创建了DNS以便记住主机名而不是IP地址。字典以相同的方式使用,因此我们可以记住AVP名称而不是类型编号。当FreeRADIUS解析请求或生成响应时,会查阅字典。 但是,字典与DNS不同,因为RADIUS客户端不知道FreeRADIUS使用的这些“友好”名称。永远不会在RADIUS客户端和RADIUS服务器之间交换AVP名称。

    • 问题内容: 我开始使用RxJS,但我不明白为什么在此示例中我们需要使用类似or 的函数;数组的数组在哪里? 如果有人可以直观地解释正在发生的事情,那将非常有帮助。 问题答案: 当您有一个Observable的结果是更多Observable时,可以使用flatMap。 如果您有一个由另一个可观察对象产生的可观察对象,则您不能直接过滤,缩小或映射它,因为您有一个可观察对象而不是数据。如果您生成一个可观

    • 问题内容: 使用JDBC连接池工具(如DBCP或c3p0)有什么好处? 如果只有 一个* 用户的 小型CRUD 应用程序,我们是否可以将 一个 连接会话创建为一个 单例 ? * PS :我正在构建一个带有小型数据库(5个表)的小型后端应用程序。 问题答案: 从Jon Skeet的答案到连接和语句池的好处是什么?: 创建到数据库服务器的网络连接是(相对)昂贵的。同样,要求服务器准备SQL语句(相对)

    • 问题内容: 我的问题就像标题说的那样:为什么我们需要9个补丁的图像?他们真的那么重要吗?其实,他们真正在做什么?我没有清楚地了解9色块图像的概念。 我知道9补丁图像是可伸缩的。因此,假设我有一些完全适合我的ldpi设备的图像按钮。使用Draw 9-patch工具(android SDK的一部分),我可以标记可缩放区域,并且该图像非常适合hdpi甚至xhdpi设备。边缘会很光滑。 但这真的是很好的实

    • 问题内容: 任何人都可以请我 启发 一下新的Flexbox布局模型比当前表格更好的方法吗?( display:table和所有这些都包含在我的案例中 )? IE10根本不支持它,这在不久的将来不是很好,我只是看不到表格布局有任何好处。但是,尽管如此,互联网仍然开始充满这种新的CSS布局方法的“崇拜者”,而且我看到的所有示例都可以使用普通的CSS轻松完成而不会出现问题。 15年12月25日更新: 自