J C*_*per 4 haskell type-inference typeclass
这个问题出现在阅读关于应用函子的优秀的Learn You a Haskell的新篇章中.
作为Maybe实例的定义的一部分,Applicative类型类具有:
pure = Just
Run Code Online (Sandbox Code Playgroud)
如果我只是去GHCi并导入Control.Applicative,并执行:
pure (3+)
Run Code Online (Sandbox Code Playgroud)
我没有得到任何东西(有道理).但是,如果我在表达式的一部分中使用它:
pure (3+) <*> Just 4
Run Code Online (Sandbox Code Playgroud)
我得到的只是7.我想这也就不足为奇了,但是我错过了关于类型类如何工作的一些不可或缺的东西,我认为,pure
这里的调用没有含糊之处.
如果我的困惑有意义,任何人都可以详细解释发生了什么吗?
这只是类型推断.该(<*>)
运营商既需要参数使用相同的Applicative
实例.右边是a Maybe
,所以左边也必须是a Maybe
.这就是它如何确定这里使用的实例.您可以通过键入来查看解释器中任何表达式的类型:t expression
,也许如果您只是浏览每个子表达式并查看推断的类型,您将更好地了解正在发生的事情.