相关疑难解决方法(0)

使用Join()而不是Bind()的Monads

Monad通常用return和来解释bind.不过,我猜想你也可以实现bind在以下方面join(和fmap?)

在缺乏一流功能的编程语言中,使用起来bind非常难以捉摸.join另一方面,看起来很容易.

但是,我并不完全确定我理解它是如何join运作的.显然,它有[Haskell]类型

join :: Monad m => m (m x) -> m x

对于monad列表,这显然很简单concat.但是对于一般的monad来说,这种方法在操作上实际上做了什么?我看到它对类型签名的作用,但我试图弄清楚我是如何在Java或类似的东西中写出这样的东西.

(实际上,这很容易:我不会.因为仿制药已经坏了.;-)但原则问题仍然存在......)


哎呀.看起来之前有人问过:

Monad加入功能

可能有人勾画出使用普通的单子一些实现return,fmapjoin?(即,根本没有提到>>=.)我想也许这可能有助于它沉入我愚蠢的大脑......

monads haskell

62
推荐指数
6
解决办法
1万
查看次数

如何自动括起任意haskell表达式?

我正在学习haskell,我在心理上解析我遇到的许多haskell表达式时遇到了很多困难.

当然,我希望通过足够的练习,精神上解析haskell将成为第二天性,但与此同时,为了理解我所遇到的,我想找到一些自动翻译任意的方法"标准haskell" 1表达式,其中通过引入必要的括号消除了所有"模糊的" 2个子表达式.

例如,它会翻译表达式

f g h i
Run Code Online (Sandbox Code Playgroud)

......进入

((f g) h) i
Run Code Online (Sandbox Code Playgroud)

..., 要么

a -> b -> c -> d
Run Code Online (Sandbox Code Playgroud)

......进入

a -> (b -> (c -> d))
Run Code Online (Sandbox Code Playgroud)

......等

最好,这将是我可以使用我的手机访问的工具,因为我在远离正确的计算机上阅读haskell的大部分内容.


1当然,没有这样的工具可能适用于未知固定性和关联性的自定义操作符."标准haskell"是指前奏和标准haskell库中定义的内容.

2我在这里使用"含糊不清"作为"在没有优先规则的情况下模棱两可"的简写.除非有一些优先规则解决了首先执行两个操作中的哪个操作的问题,否则 Eg 2 + 3 * 5是不明确的.

haskell

7
推荐指数
1
解决办法
508
查看次数

Haskell >> 带有两个列表的运算符

对于大学作业,我正在学习 Haskell,当阅读有关 do-notation 和排序的内容时>>=>>我遇到了这种我没有预料到的行为。

[1,2,3] >> [1] -- returns [1,1,1]
Run Code Online (Sandbox Code Playgroud)

谁能解释为什么第一个数组的每个元素都被第二个数组的元素替换?似乎列表以某种方式连接起来,而我预计第一个表达式的结果将被完全忽略,因此我期望[1]结果。

预先非常感谢。

monads haskell list ghci sequencing

4
推荐指数
1
解决办法
194
查看次数

标签 统计

haskell ×3

monads ×2

ghci ×1

list ×1

sequencing ×1