Thi*_*one 6 haskell functional-programming
在Haskell中,(<*>)运算符的默认实现(它将函数a->b的应用应用于a导致应用程序的应用程序b)在Control.Applicative中定义为 -
(<*>) :: f (a -> b) -> f a -> f b
(<*>) = liftA2 id
Run Code Online (Sandbox Code Playgroud)
而我根本无法理解它是如何工作的.
liftA2具有类型liftA2 :: (a -> b -> c) -> f a -> f b -> f c,意味着它需要二进制函数,而id不是.根据我的理解,这种方式id在某种程度上被解释为一些更复杂的类型 - 但我不确定它是什么或如何使这个定义工作.如果有人也许可以解释什么类型的id解释为(在什么类型a的id :: a -> a定义代表),也走过它是如何产生这需要的功能的应用性和价值的应用性和适用他们,我会非常感激的功能.
sep*_*p2k 10
假设idis 的类型d -> d,所以我们所有的类型变量都有不同的名称.现在让我们介绍两个新的类型变量e,t并说出来d = e -> t.这使得类型id:
id :: (e -> t) -> e -> t
Run Code Online (Sandbox Code Playgroud)
现在,这符合第一个参数的类型liftA2有a = e -> t,b = e和c = t.因此,使用这些分配,类型liftA2变为:
liftA2 :: ((e -> t) -> e -> t) -> f (e -> t) -> f e -> f t
Run Code Online (Sandbox Code Playgroud)
如果我们应用第一个参数,剩下的类型就变成了f (e -> t) -> f e -> f t,这正是<*>(模数重命名)的类型.
| 归档时间: |
|
| 查看次数: |
141 次 |
| 最近记录: |