我正在阅读 Applicative for functions 的实例, 遇到一行
instance Applicative ((->) r) where
pure x = (\_ -> x)
f <*> g = \x -> f x (g x)
我理解语法,但不理解第二行的意思。
我的理解是:部分应用函数 ((->) r)
获取一个值并将该值包装到上下文中,上下文包含始终返回该值的函数。
为什么它不通过将部分应用的函数应用到那个 x
来计算结果,并且只有在那之后它才会将结果存储在 Applicative context 中?
最佳答案
pure
的签名和 (<*>)
对于函数实例是
pure :: a -> ((->) r a)
(<*>) :: ((->) r (a -> b)) -> ((->) r a) -> ((->) r b)
将 (->) 写成中缀运算符给出
pure :: a -> (r -> a)
(<*>) :: (r -> (a -> b)) -> (r -> a) -> (r -> a)
所以 pure
是一个接受 a
类型参数的函数并返回一个接受 r
类型参数的函数并返回 a
类型的值.
因为我们不知道 r
的类型正如我们所写pure
, 我们只能给出一个函数,返回给 pure
的参数.
关于haskell - `pure x = (\_ -> x)` 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47385618/