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

.net - 在 C# 中添加 SelectMany 将 linq 扩展为新的 monad 类型,我如何在 VB.net 中做同样的事情?

一篇解释 monads的旧的Yet Another Language Geek 博客文章描述了向 C# 添加 SelectMany 扩展方法,以便将 linq 语法扩展到新类型。

我已经在 C# 中尝试过它并且它有效。我直接转换为 VB.net,但它不起作用。有谁知道 VB.net 是否支持此功能或如何使用它?

这是有效的 C# 代码:

这是不起作用的VB.net代码(注意:用vs2010编写,因此可能缺少一些续行):

0 投票
3 回答
317 浏览

arrays - 像mapM这样的东西,但对于数组?(类似arrayMap,但映射一个不纯的函数)

我看到我可以使用 mapArray 在可变数组上映射一个函数,但似乎没有像 mapM(和 mapM_)这样的东西。mapArray 不会让我打印它的元素,例如:

结果将是:

Haskell 中是否有类似的东西(或者在 GHC 中,即使不是标准的 Haskell)?

此外,我发现没有用于数组的 foldr/foldl 函数(可变与否)。它们存在吗?

非常感谢!

0 投票
3 回答
486 浏览

functional-programming - looking for learning exercise: implement these monads

When learning about new programming subjects I usually follow a pattern: I read about it, I understand it, and then I code up a few examples to make sure I really get it.

I've read a lot about monads, and I'm confident that I understand and get them. I'm now at a stage where I'd really like to code up a few monads to solidify my understanding, and really figure out what it takes to implement bind for a variety of types.

The problem is that I can't think of many obvious monads to implement, so I'm looking for recommendations. Preferably, I'd like a list of recommendations, with some easy ones and some not so easy ones.

I also realize that while monads are used to 'encapsulate' side effects in functional programs, they are also more general than that. So, I'd like the recommendations to include monads that both encapsulate side effects and some general ones.

Thanks!

(as a side note: I'll be working with f# to do this, but I think this question could apply to any functional language).

0 投票
4 回答
406 浏览

haskell - Haskell 的“做”问题

我编写了一个 Haskell 函数,它计算给定列表中每个数字的阶乘并将其打印到屏幕上。

该功能有效,但我发现第三行有点混乱。为什么编译器(GHC)没有报告错误,因为“putStrLn”(准?)函数之前没有“do”?如果我从第 4 行省略“do”,则会按预期弹出错误。

我对 Haskell 及其方式很陌生,所以如果我说的过于愚蠢的话,请原谅我。

0 投票
6 回答
1443 浏览

haskell - 关于 Haskell 中 monad 的一些问题

我正在学习单子并有几个问题。

这就是我现在的位置。请纠正我哪里错了。

  • >>=符号是一个中缀运算符。中缀运算符是接受两个参数(左侧和右侧)并返回一个值的函数。

  • >>=符号称为绑定运算符并具有签名Monad m => m t -> (t -> m u) -> m u。但是,这些类型似乎并没有在这里排列。我们得到一个类型的值,m t第二个参数是一个接受t. (我不知道如何连接这些点。)

  • 这必须意味着绑定函数能够以某种方式m从 them t中删除,以便获取 thet并将其传递给函数。

以下是我的问题:

  • m是否能够从m t只有在这种绑定运算符中才能实现的东西中删除。这个绑定运算符是否有一些特殊的特权或什么?

  • 它与状态变化有什么关系?我理解(我认为)单子的目标是“包装”副作用,以便它们与程序的其余部分隔离。但是绑定运算符在其中的作用是什么?

0 投票
4 回答
30959 浏览

haskell - 一个 Haskell 函数类型:IO String-> String

我在 Haskell 中编写了一堆代码来创建文本索引。顶部函数如下所示:

现在我想给这个函数一个从文件中读取的字符串:

这不起作用,因为 readFile 的类型是 FilePath -> IO String。

无法将预期类型“字符串”与推断类型“IO 字符串”匹配

我看到了错误,但找不到任何类型的函数:

我想成功的关键在于某些 Monads,但我找不到解决问题的方法。

0 投票
2 回答
4893 浏览

c# - 为什么没有像 IMonad 这样的东西在即将到来的 .NET 4.0 中

... 与所有这些新的(如果我们算上 IEnumerable 的话就不是那么新)monad 相关的东西?

这将允许编写在任何单子类型上运行的函数。或者它不是那么重要?

0 投票
3 回答
6443 浏览

haskell - 在 haskell 中创建 monad

我想创建自己的 monad。这就是我写的:

但这不起作用。ghc 说:

那有什么问题?


我想在 i 小于 n 时进行计算。n 应该是常数,因为我还不知道如何正确地做到这一点。它应该是 State 和 Maybe 的某种混合。如果你有一些建议,请随时与我分享:P

0 投票
3 回答
1077 浏览

haskell - 有人可以引导我完成这个 Haskell 函数(与状态单子相关)吗?

put (n+1)对这个函数的最终结果有什么影响感到困惑。看起来这个函数应该返回初始状态不变。我试图在脑海中回顾这一点,但我一直没有足够的空间来固定东西。:\

如果有人可以指导我评估此功能,那将非常有帮助。

0 投票
4 回答
533 浏览

haskell - 使用 list monad 实现每位数计数器

所以,我在这里查看了这个问题,并为这个问题构建了一个相当丑陋的解决方案。在尝试清理它时,我开始研究列表推导和列表单子。我决定做的是使用 list monad 实现一个每位数的计数器。给定一个数字输入序列[1, 2],我想生成一个输出序列,如下所示:

也就是说,我将遍历该范围内列表中所有元素的所有可能值。

haskell.org list monad 文档说:

绑定函数应用于输入列表中的所有可能值,并将结果列表连接起来以生成所有可能结果的列表。

伟大的!看起来很完美......这是我为生成解决方案而编写的代码:

但是用任何东西调用count都会产生空列表,我不知道为什么。我错过了什么?