haskell 中 >> 运算符的逆运算
Inverse of >> operator in haskell
所以我的代码在使用 monad 时看起来与我在使用应用程序和仿函数时看起来很相似,我一直在使用 =<<
而不是 >>=
。我也一直在使用 <*
而不是 *>
/ >>
。但是我注意到 <*
不是 *>
什么 =<<
是 >>=
.
例如:
print 5 <* print 6
给我:
5
6
当我期待他们以相反的方式打印时,调用 print 6
,打印 6,然后结果 ()
被丢弃,然后调用 print 5
。
进一步尝试后,<*
和 *>
似乎仅在 return 值上有所不同,而不是函数的组合/排序方式。而 =<<
是 >>=
的适当翻转,包括从左到右的固定性切换。
我想知道为什么会这样(似乎 >>=
是倒退的,但它更适合而不是倒退的 <*>
<*
*>
组合,即使 >>=
和 <*>
的类型签名被翻转)。我还想知道是否有我可以/应该使用的 <<
样式运算符。
作为一个附带问题,当涉及到 =<<
时,左结合性和右结合性什么时候会有所不同,似乎无论你把括号放在哪里,结果都是一样的,虽然我不可否认,只用相当简单的例子进行了测试。
是的,*>
和 <*
仅在 return 值上有所不同。
it somehow fits better with the, not backwards, <*>
<*
*>
combination, even though the type signatures of >>=
and <*>
are flipped
我不会说 >>=
和 <*>
的签名被翻转了。相反, <*>
只是专门用于在其左侧参数中包含一个函数,然后 applied 到右侧参数中的值。您也可以使用 >>=
来执行此操作,请考虑
fs<*>xs ≡ fs >>= \f -> f<$>xs
我认为 <<
的 applicative-equivalent 没有太大必要,就像不需要 ++
的翻转版本一样:只需对 [=] 的参数排序11=] 或 <*
按照您想要的语义所需的顺序排列!
does left vs right associativity even make a difference when it comes to =<<
, it seems as though no matter where you put the parenthesis, the result is the same
呃,那是不正确的。右边有parens的版本连well-typed都没有。也许您已经尝试过使用 lambda 的一些示例,但没有在您的 parens?
中考虑到这些
所以我的代码在使用 monad 时看起来与我在使用应用程序和仿函数时看起来很相似,我一直在使用 =<<
而不是 >>=
。我也一直在使用 <*
而不是 *>
/ >>
。但是我注意到 <*
不是 *>
什么 =<<
是 >>=
.
例如:
print 5 <* print 6
给我:
5
6
当我期待他们以相反的方式打印时,调用 print 6
,打印 6,然后结果 ()
被丢弃,然后调用 print 5
。
进一步尝试后,<*
和 *>
似乎仅在 return 值上有所不同,而不是函数的组合/排序方式。而 =<<
是 >>=
的适当翻转,包括从左到右的固定性切换。
我想知道为什么会这样(似乎 >>=
是倒退的,但它更适合而不是倒退的 <*>
<*
*>
组合,即使 >>=
和 <*>
的类型签名被翻转)。我还想知道是否有我可以/应该使用的 <<
样式运算符。
作为一个附带问题,当涉及到 =<<
时,左结合性和右结合性什么时候会有所不同,似乎无论你把括号放在哪里,结果都是一样的,虽然我不可否认,只用相当简单的例子进行了测试。
是的,*>
和 <*
仅在 return 值上有所不同。
it somehow fits better with the, not backwards,
<*>
<*
*>
combination, even though the type signatures of>>=
and<*>
are flipped
我不会说 >>=
和 <*>
的签名被翻转了。相反, <*>
只是专门用于在其左侧参数中包含一个函数,然后 applied 到右侧参数中的值。您也可以使用 >>=
来执行此操作,请考虑
fs<*>xs ≡ fs >>= \f -> f<$>xs
我认为 <<
的 applicative-equivalent 没有太大必要,就像不需要 ++
的翻转版本一样:只需对 [=] 的参数排序11=] 或 <*
按照您想要的语义所需的顺序排列!
does left vs right associativity even make a difference when it comes to
=<<
, it seems as though no matter where you put the parenthesis, the result is the same
呃,那是不正确的。右边有parens的版本连well-typed都没有。也许您已经尝试过使用 lambda 的一些示例,但没有在您的 parens?
中考虑到这些