在这个问题上,寻求对monad实施的建设性批评,abesto要求人们批评他的"Monad",它一直计算绑定操作的数量.事实证明,这实际上不是一个单子,因为它不满足前两个monadic定律,但我发现这个例子很有趣.是否有适合此类结构的数据类型?
这是一个有趣的问题,与monad的数学谱系有关.
我们当然可以创建一个名为Monadish
类似的Monad
类型类,它看起来与类型类似:
class Monadish m where returnish :: a -> m a bindish :: m a -> (a -> m b) -> m b
所以monad法则与类型类的实际签名无关; 它们是实施者必须自己执行的额外信息.所以,从某种意义上说,答案是"当然"; 只需制作另一个类型类,并说它不必满足任何法律.
但是这样的类型类很有意思吗?对于数学家来说,答案是否定的:缺乏任何法律意味着没有任何有趣的结构可供推理.当我们定义数学结构时,我们通常定义一些对象(检查),一些操作(检查),然后定义一些操作属性(... nope).我们需要所有这三个来证明关于这类对象的定理,而举一个例子,抽象代数就是采取相同的操作并添加更多或更少的定律.
对于软件工程师来说,答案有点复杂.不需要推理:您总是可以使用类型类来重载语法以用于您自己的恶意目的.我们可以使用类型类将"感觉"相同的事物组合在一起,即使我们没有任何正式的理由相信这样.这样做有一些好处,但我个人觉得这会带来很多法律的好处,并导致建筑宇航员发明抽象结构而不需要考虑它们的适用性.数学是一个更安全的赌注:monad法则对应于左侧身份,正确身份和相关性,即使是非数学人士也会熟悉的合理基本假设.
归档时间: |
|
查看次数: |
312 次 |
最近记录: |