Bul*_* M. 1 haskell types typeclass semantics
我正在读函数的Applicative实例,并遇到了一行
instance Applicative ((->) r) where
pure x = (\_ -> x)
f <*> g = \x -> f x (g x)
Run Code Online (Sandbox Code Playgroud)
我理解语法,但不理解第二行的含义.
我的理解是:部分应用函数((->) r)获取一个值并将该值包装到上下文中,该上下文包含始终返回该值的函数.
为什么不通过将部分应用的函数应用于此来计算结果x,并且仅在此之后它将结果存储在Applicative上下文中?
函数实例 的签名pure和(<*>)
pure :: a -> ((->) r a)
(<*>) :: ((->) r (a -> b)) -> ((->) r a) -> ((->) r b)
Run Code Online (Sandbox Code Playgroud)
将( - >)写为中缀运算符给出
pure :: a -> (r -> a)
(<*>) :: (r -> (a -> b)) -> (r -> a) -> (r -> a)
Run Code Online (Sandbox Code Playgroud)
这pure是一个函数,它接受一个类型的参数,a并返回一个带有类型参数的函数,r并返回一个类型的值a.
由于我们无法知道r我们编写的类型,因此我们pure只能给出一个返回给定参数的函数pure.
| 归档时间: |
|
| 查看次数: |
148 次 |
| 最近记录: |