【发布时间】:2019-12-27 15:50:37
【问题描述】:
我正在通过this source code学习。
在第 81 行,我看到以下代码:
MaybeT . fmap Just $ locked .= False
我对函数组合的使用感到困惑,所以我将它加载到我的repl中并用函数应用程序替换它
MaybeT $ fmap Just $ locked .= False
我很惊讶这两段代码给出了确切的结果。
Control.Monad.State.Class.MonadState Game m => MaybeT m ()
事实上,我可以理解函数应用程序($) 是如何产生这个结果的,但是我对函数组合(.) 是如何产生这个结果感到困惑。这两个函数的签名不同,我认为如果一个替换另一个,它们显然会产生不同的结果。
:t (.) :: (b -> c) -> (a -> b) -> a -> c
:t ($) :: (a -> b) -> a -> b
有人可以向我解释为什么($) 和(.) 在这种情况下可以互换。
【问题讨论】:
-
(a . b) $ c与a $ (b $ c)相同 - 或者没有明确的$,这只是分组的语法糖:(a . b) c=a (b c) -
为什么我被否决了?
-
我不是反对者,但
($)与(.)是我们已经讨论过多次的话题。只提一个问题:stackoverflow.com/questions/3030675/… -
我在发帖前尝试搜索了一下,但没有看到。对不起,我错过了。乍一看,我仍然认为我的问题仍然相关,因为代码行涉及更多的复杂性和噪音。我更难归结为答案。此外,主题有点不同。另一篇文章对他们的工作方式并不感到困惑,只是更喜欢哪种风格。我的问题具体是它是如何工作的。但是,当然,感谢您的链接。我也会经历这些并寻找更多资源。
标签: haskell functional-programming operators operator-precedence function-composition