问题标签 [monads]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
11363 浏览

haskell - 谁能解释一下Monads?

可能重复:
什么是单子?

我想我明白什么是'Maybe Monads',但我不确定其他类型。

0 投票
10 回答
7428 浏览

parsing - 我如何了解解析器组合器?

我找到了一些关于这个主题的资源,但它们都需要对SmallTalkHaskell有深入的了解,我都不知道。

0 投票
47 回答
289767 浏览

haskell - 什么是单子?

最近对 Haskell 进行了简要介绍,对于 monad 本质上是什么,有什么简短、简洁、实用的解释?

我发现我遇到的大多数解释都相当难以理解并且缺乏实际细节。

0 投票
5 回答
4640 浏览

haskell - 你如何在 Haskell 中创建一个通用的 memoize 函数?

我看过另一篇关于这个的帖子,但是在 Haskell 中有没有一种干净的方法呢?

作为第二部分,它也可以在不使函数单子化的情况下完成吗?

0 投票
2 回答
19153 浏览

haskell - do 块中 case 表达式的 Haskell 语法

case我无法用块中的表达式完全弄清楚这个语法问题do

什么是正确的语法?

如果你能纠正我的例子并解释它,那将是最好的。

一点更新。我的源文件是空格和制表符的混合体,它导致了各种问题。只是给从 Haskell 开始的任何其他人的小费。如果您遇到问题,请检查源代码中的制表符和空格。

0 投票
3 回答
2325 浏览

haskell - 将 monad 限制为类型类

在 Haskell 中,有没有办法限制 monadM aa满足类型类约束?

我正在将概率建模示例F#转换为Haskell。但是,在 Haskell 中,我省略了,support因为它会更改data Distribution adata (Ord a) => Distribution a. 通过此更改,我收到以下错误:

实际上,always/的类型return是:(Ord a) => a -> Distribution a。有没有办法让我拥有一个 monad Distribution,但强制限制(Ord a)这个 monad?我试过:

但我得到了错误:

所以它有一种方法可以有一个 monad M a,但是a用一个约束来限制Ord a?

谢谢。

0 投票
4 回答
2409 浏览

functional-programming - 实现 Monad 的语言必须是静态类型的吗?

我正在学习函数式编程风格。在Don't Fear the Monads中,Brian Beckman 对 Monad 做了精彩的介绍。他提到 Monad 是关于函数的组合以解决复杂性。

Monad 包含unit将 T 型转换为放大型 M(T) 的功能;和一个 Bind 函数,给定从 T 到 M(U) 的函数,将类型 M(T) 转换为另一种类型 M(U)。(U可以是T,但不一定)。

据我了解,实现 monad 的语言应该进行静态类型检查。否则编译时找不到类型错误,“复杂度”不受控制。我的理解正确吗?

0 投票
8 回答
5191 浏览

haskell - 单子的创造性使用

我正在寻找 monad 的创造性用途来学习。我在某处读过单子已在 AI 中使用,但作为单子新手,我看不到如何使用。

请包含指向源代码和示例用法的链接。请不要使用标准单子

0 投票
4 回答
994 浏览

haskell - 有没有关于如何使用 Haskell monad 函数的好例子?

Haskell monad 函数不太好理解,在哪里可以找到使用示例?

0 投票
8 回答
14212 浏览

haskell - 使用 Haskell state monad 有代码味道吗?

上帝我讨厌“代码气味”这个词,但我想不出更准确的说法。

我在业余时间为Whitespace设计高级语言和编译器,以了解编译器构造、语言设计和函数式编程(编译器是用 Haskell 编写的)。

在编译器的代码生成阶段,我必须在遍历语法树时维护“状态”数据。例如,在编译流控制语句时,我需要为要跳转到的标签生成唯一名称(从传入、更新和返回的计数器生成的标签,并且不得再次使用计数器的旧值)。另一个例子是当我在语法树中遇到内联字符串文字时,需要将它们永久转换为堆变量(在 Whitespace 中,字符串最好存储在堆中)。我目前正在将整个代码生成模块包装在 state monad 中来处理这个问题。

有人告诉我,编写编译器是一个非常适合函数式范例的问题,但我发现我设计它的方式与我在 C 中设计它的方式非常相似(你真的可以用任何语言编写 C - 甚至带有状态单子的 Haskell)。

我想学习如何在 Haskell 中思考(而不是在函数范式中)——而不是在带有 Haskell 语法的 C 中。我真的应该尝试消除/最小化 state monad 的使用,还是它是一种合法的功能性“设计模式”?