问题标签 [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 投票
4 回答
4529 浏览

functional-programming - 延续单子?

延续可以说是单子吗?它们是 monad 的子集还是仅仅是实现 monad 的一种方式?

编辑:或者也许我弄错了,单子是一个比延续更抽象的概念?(所以我真的在这里比较苹果和橘子)

0 投票
3 回答
1154 浏览

haskell - Haskell:如何将一个句柄的内容实时传送到另一个句柄

我正在编写一个以交互方式运行外部子进程的程序,我需要输出句柄的内容在可用时立即输出到标准输出。我尝试过这样的事情:

但这不起作用,因为它只能逐行识别输出,因此进程输出句柄上的任何未由换行符终止的输出都不会显示。我用 hGetContents 尝试过同样的事情,但它产生了相同的结果。我已经阅读了 System.Process 和 System.IO 的文档,并没有真正找到任何结论。

0 投票
6 回答
34022 浏览

c# - 在 C# 中,什么是单子?

这些天有很多关于 monad 的讨论。我已经阅读了几篇文章/博客文章,但我不能通过他们的例子走得足够远来完全掌握这个概念。原因是 monad 是一个函数式语言概念,因此这些示例使用的是我没有使用过的语言(因为我没有深入使用函数式语言)。我不能深入地掌握语法以完全遵循这些文章......但我可以说那里有一些值得理解的东西。

但是,我非常了解 C#,包括 lambda 表达式和其他功能特性。我知道 C# 只有一个功能特性的子集,所以也许 monads 不能用 C# 表达。

但是,肯定可以传达这个概念吗?至少我希望如此。也许您可以提供一个 C# 示例作为基础,然后描述 C# 开发人员希望他能从那里做什么但由于该语言缺乏函数式编程特性而无法做到的事情。这将是很棒的,因为它会传达单子的意图和好处。所以这是我的问题:对于 C# 3 开发人员,你能给 monad 最好的解释是什么?

谢谢!

(编辑:顺便说一句,我知道SO上已经有至少3个“什么是monad”问题。但是,我面临同样的问题......所以这个问题是需要imo的,因为C#-developer重点。谢谢。)

0 投票
3 回答
446 浏览

f# - 计算表达式不执行 Let

我正在使用 F# v 1.9.6.2,并且我定义了一个非常简单的计算表达式:

我在代码中添加了一些打印语句来告诉我在计算表达式中调用了哪些方法。当我执行以下语句时:

我希望控制台打印出以下内容:

但我的实际结果如下:

换句话说,F# 似乎没有执行该Let成员。当我重新编写Let抛出异常时,代码运行时没有异常。此外,当我完全注释掉该Let成员时,我没有收到一条错误消息说明The field, constructor or member 'Let' is not defined,并且代码按预期执行。

(我尝试使用 Reflector 调查代码,但通常情况下,反编译的 F# 被破坏,超出了可读性。)

看起来计算表达式的规范已经改变。let绑定不再被视为语法糖,计算Let工作流程中不再需要成员吗?

0 投票
4 回答
2804 浏览

closures - monad 和闭包有什么区别?

我有点困惑阅读两者之间的定义。它们实际上可以在定义方面相交吗?还是我完全迷路了?谢谢。

0 投票
8 回答
2824 浏览

c# - 在 C# 中使用 Monads 的令人信服的场景是什么

让我先声明一下,我对 Monad 的理解还很幼稚。我在这里阅读了有关 Monads 的各种主题,并对这个概念进行了几个小时的研究。我对这个词几乎感觉不舒服,但我认为可以肯定地说我通常理解 Monad 是/做什么。

我是一名 C# 开发人员,希望改进我的工作方式。在我的 Monaducation 中进一步帮助我的是在 C# 中看到 Monad 的真实世界应用程序(即通过 linq SelectMany() 或类似的方法),这显然是对 oldskool C# 中解决同类问题的其他方法的改进。

有人见过这样的野兽吗?

0 投票
2 回答
21815 浏览

haskell - Haskell:不能使用“map putStrLn”?

我有一个字符串列表,并尝试了这个:

那没有用,我不明白为什么。

有什么提示吗?我想这与 map 返回一个列表而不是一个值有关,但我没有找到一种简单的方法来解决这个问题。

现在我知道打印字符串列表的唯一方法是编写一个函数来迭代列表,打印每个元素(如果列表是 [a] 则打印,但如果它是 (a:b) 则打印并递归)。但是只使用地图会简单得多......

谢谢!

0 投票
1 回答
3888 浏览

haskell - Haskell 中的错误处理与 Either monad

我有一个函数可以检查一个类型是否是另一种类型的子类型:

我想做错误处理。我有以下定义:

有时我可以通过将 st 的结果视为 Either 来进行错误处理。例如,以下函数有效,并获取我在 st 中调用“失败”所产生的消息:

现在,我在 st 里面,我想递归地调用它。出于某种原因,以下代码嵌套在 st 深处:

不输入检查,但给我以下错误:

为什么将 st 的结果视为 Either 在 'st' 之外工作而不在内部工作?如何更改我的代码以使其也可以在内部工作?

0 投票
5 回答
38879 浏览

variables - Haskell 有变量吗?

我经常听到有人声称 Haskell 没有变量。特别是,这个答案声称它没有,并且它至少被投票九次并被接受。

那么它是否有变量,为什么?

这个问题似乎也适用于 ML、F#、OCaml、Erlang、Oz、Lava 和所有SSA中间语言。

0 投票
3 回答
1107 浏览

haskell - 在 Haskell 中,'get' 实际上是如何 /get/ 初始状态的?

我有一个功能:

我几乎可以理解整个函数中发生的事情,并且我开始掌握 monads 的窍门。我不明白的是,当我运行这个时:

'test' 中的 'get' 函数以某种方式获取初始状态“testtest”。有人可以分解并向我解释吗?

我很感激任何回应!