`pure x = (\_ -> x)` 是什么意思?
What is the meaning of `pure x = (\_ -> x)`?
我正在阅读 Applicative for functions 的实例,
遇到一行
instance Applicative ((->) r) where
pure x = (\_ -> x)
f <*> g = \x -> f x (g x)
我理解语法,但不理解第二行的意思。
我的理解是:部分应用函数 ((->) r)
获取一个值并将该值包装到上下文中,上下文包含始终 returns 该值的函数。
为什么它不只是通过对 x
应用部分应用的函数来计算结果,并且只有在那之后它才会将结果存储在应用上下文中?
函数实例的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
参数的函数,而 return 是一个接受类型 r
和 return 参数的函数s 类型为 a
.
的值
由于我们在写pure
的时候无法知道r
的类型,所以我们只能给出一个函数,return给pure
.
的参数
我正在阅读 Applicative for functions 的实例, 遇到一行
instance Applicative ((->) r) where
pure x = (\_ -> x)
f <*> g = \x -> f x (g x)
我理解语法,但不理解第二行的意思。
我的理解是:部分应用函数 ((->) r)
获取一个值并将该值包装到上下文中,上下文包含始终 returns 该值的函数。
为什么它不只是通过对 x
应用部分应用的函数来计算结果,并且只有在那之后它才会将结果存储在应用上下文中?
函数实例的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
参数的函数,而 return 是一个接受类型 r
和 return 参数的函数s 类型为 a
.
的值
由于我们在写pure
的时候无法知道r
的类型,所以我们只能给出一个函数,return给pure
.