gpt4 book ai didi

haskell - 在程序中使用 Monad 有什么意义?

转载 作者:行者123 更新时间:2023-12-05 00:26:07 24 4
gpt4 key购买 nike

假设我正在用 Haskell 创建一个图像处理库。
我已经定义了一些我自己的数据类型。

我什么时候应该将我的一些数据类型声明为 Monad(或仿函数或应用仿函数等)?
这样做有什么好处?

我知道如果可以“映射”某些数据类型,那么我可以将其声明为仿函数的实例。但如果我这样做有什么好处?

这可能是一个非常愚蠢的问题,但我仍在努力进入函数式编程领域。

最佳答案

这点与在OO编程中使用任何有用的抽象接口(interface)的点基本相同;所有已经存在的在该接口(interface)方面有用的代码现在都适用于您的新类型。

没有什么说你必须把任何东西做成 Monad 的实例,它不会让你真正做任何你无论如何都做不到的事情。但如果你不这样做,实际上可以保证你编写的一些代码实际上会重新实现与适用于任何 monad 的现有代码等效的东西;可能你会在不知不觉中这样做。

如果您对 Monad 界面不是很熟悉/没有信心,那么识别这种冗余并删除它可能比仅仅编写重复的代码更加努力。但是如果你确实熟悉了,那么发现可能是 Monad 的东西就变得相当自然了,就像发现你将要编写的可以被现有 Monad 代码替换的代码一样。同样,这与 OO 语言中通用的抽象接口(interface)非常相似。主流的 OO 语言往往缺乏表达通用 monad 概念所需的类型系统特性,所以它并不是许多 OO 程序员已经熟悉的一种。与编程中的任何事情一样,获得这种熟悉度的最好方法就是使用它一段时间,然后偶然发现所有事情都比你已经习惯的其他方式花费更长的时间。

Monad 只不过是一个非常普遍有用的接口(interface)。 Monad 在 Haskell 中特别有用,因为它们已被社区接受为标准,因此许多现有的库代码都可以使用它们。但对他们来说,没有什么比这更神奇的了。

关于haskell - 在程序中使用 Monad 有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22822926/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com