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

什么是Haskell单子所没有的身份?

伊锦
2023-03-14
return a >>= k  =  k a
m >>= return  =  m
m >>= (\x -> k x >>= h)  =  (m >>= k) >>= h

共有1个答案

卫君博
2023-03-14

考虑这个实例,以所接受的链接问题的答案为约束。

newtype List a = List [a] deriving (Functor, Applicative)

instance Monad List where
    return _ = List []
    m >>= f = List []

一个编译器将接受这个定义,但它不服从单子律。具体来说,尽量确认

m >>= return == m

对于[]列表:

-- Correct
Prelude> [1,2,3] >>= return
[1,2,3]

-- Not correct, should be List [1,2,3]
Prelude> List [1,2,3] >>= return
List []
 类似资料:
  • 问题内容: 我正在阅读该package的代码,然后想知道其工作原理。 我发现代码如下: 因此,我找到了- 的定义,因为它没有函数体,这很奇怪。 我想知道: 真正的代码在哪里 为什么这里可以存在“抽象方法” 为什么Go的作者这样写 谢谢! 问题答案: 1)函数定义在这里: 2)函数声明: 函数声明可以省略主体。这样的声明为Go外部实现的功能(例如汇编例程)提供了签名。 3)并非每种编程语言都可以完全

  • 现代CPU经过优化,使得访问和修改内存中的相同位置(时间位置)以及内存中的连续位置(空间位置)都是极其快速的操作。 现在,由于Haskell是一种纯粹的不可变语言,您自然不能覆盖现有的内存块,这可能会使 之类的操作比C中具有连续访问的结果变量的 循环慢得多。 Haskell在内部做了什么来减轻这种性能损失吗?一般来说,它关于局部性的性质是什么?

  • 问题内容: 我相信Erlang社区不会羡慕Node.js,因为它本身就进行非阻塞I / O并具有将部署轻松扩展到一个以上处理器(Node.js甚至没有内置的功能)的方法。有关更多详细信息,请访问http://journal.dedasys.com/2010/04/29/erlang- vs-node-js 和Node.js或Erlang 那Haskell呢?Haskell是否可以提供Node.js

  • 我看到自由单子这个词时不时地出现了一段时间,但每个人似乎只是在使用/讨论它们,而没有给出它们是什么的解释。那么:什么是自由单子?(我会说我熟悉单子和Haskell基础,但对范畴理论只有非常粗略的知识。)

  • 问题内容: 众所周知,有多种原因(请参阅第一个答案)。为什么只有一个例外涵盖所有这些情况,而不是多个继承自的细粒度情况? 问题答案: 我期望如此,因为发生这种情况时,您实际上什么也做不了:为何耗尽资源几乎无关紧要,因为无论如何您都被搞砸了。也许附加信息会很好,但是… 我知道tomcat会尝试执行“内存不足降落伞”操作,在此过程中,它们会保留一块内存并尝试释放它,但是我不确定它的工作原理。