【发布时间】:2013-01-05 21:38:22
【问题描述】:
Monad 类定义了一个>> 方法,该方法对两个单子动作进行排序:
>> :: Monad m => m a -> m b -> m b
绑定运算符>>= 有一个等效的翻转参数=<<;与一元函数组合('fish')运算符>=> 和<=< 一样。不过,似乎没有<<(经过几分钟的胡扯)。这是为什么呢?
编辑:我知道这没什么大不了的。我只是喜欢某些代码行与左指向运算符的外观。 x <- doSomething =<< doSomethingElse 比x <- doSomethingElse >>= doSomething 看起来更好,箭头方向都一样。
【问题讨论】:
-
没有人为此辩护。
-
他们做
=<<和<=<的时候没想到吗?我不知道为什么它会困扰我,这似乎只是一个疏忽。 -
@MathematicalOrchid 是的,他们有。可怜的,显然他们没有想到,或者认为它没有说服力。
-
@MathematicalOrchid 它们都将
x绑定到monaddoSomething >>= doSomethingElse内的对象,这与doSomethingElse =<< doSomething相同。 RHS 在分配之前会被完全评估,就像在命令式语言中一样。 -
@poorsod 好吧,
<=<和=<<出现而<<没有出现是有原因的(无论是过去的决策,还是决策) .您的示例说明,x <- amb =<< ma或多或少是自然的,x <- mb << ma不是,您可以在上面的行中写上ma,而只需写上x <- mb。