gpt4 book ai didi

haskell - 什么是合适的数据类型?

转载 作者:行者123 更新时间:2023-12-02 12:03:25 25 4
gpt4 key购买 nike

在问题中,Seeking constructive criticism on monad implementation , abesto让人们批评他的“Monad”,它记录了绑定(bind)操作的数量。事实证明,这实际上并不是一个单子(monad),因为它不满足前两个单子(monad)定律,但我发现这个例子很有趣。有没有适合这种结构的数据类型?

最佳答案

这是一个有趣的问题,与单子(monad)的数学谱系有关。

我们当然可以创建一个名为 Monadish 的类型类,它看起来与 Monad 类型类一模一样:

class Monadish m where  returnish :: a -> m a  bindish :: m a -> (a -> m b) -> m b

因此,单子(monad)法则与类型类的实际签名无关;它们是实现者必须自己强制执行的额外信息。所以,从某种意义上说,答案是“当然”;只需创建另一个类型类并说它不必满足任何法律。

但是这样的类型类有趣吗?对于数学家来说,答案是否定的:缺乏任何定律意味着没有有趣的结构可以用来推理。当我们定义数学结构时,我们通常定义一些对象(检查),一些操作(检查),然后定义操作的一些属性(...不)。我们需要所有这三个来证明关于此类对象的定理,并且举一个例子,抽象代数就是采用相同的运算并添加更多或更少的定律。

对于软件工程师来说,答案有点复杂。推理不是必需的:您始终可以使用类型类来重载语法以达到您自己的邪恶目的。我们可以使用类型类将“感觉”相同的事物组合在一起,即使我们没有任何正式的理由相信这一点。这样做有一些好处,但我个人认为这消除了法律的很多好处,并导致建筑宇航员发明抽象结构而没有充分考虑其适用性。数学是一个更安全的选择:单子(monad)定律对应于左恒等式、右恒等式和结合性,这些基本假设即使是非数学人士也会熟悉。

关于haskell - 什么是合适的数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5403030/

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