haskell - `pure x = (\_ -> x)` 是什么意思?

标签 haskell types semantics typeclass

我正在阅读 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/

相关文章:

list - 元组字符串的模式匹配列表

c++ - 如何强制 g++ 内联函数?

haskell - 无法安装darcsden-1.1(haskel包)

c++ - C++ 11条件变量语义

haskell - Eq 实例有一些奇怪的比较

c++ - C++ 11 auto关键字多少太多了?

javascript - TypeScript 中的通用嵌套值 getter

Java-识别整数和 double

html - 如果有的话,什么时候是使用 <b> 和 <i> 代替 <strong> 和 <em> 的最佳时机?

html - 文章标签和图片