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

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

相关文章:

msbuild - 使用 MSBuild 通过 VS2017 构建 SSDT 项目失败

r - 如何从日期获取 ISO 周数

python - 如何计算图像中的亮像素?

listview - Xamarin.Forms:软键盘与页面底部的最后一个条目(滚动时)重叠

reactjs - 文件上传不适用于按钮单击 Material -UI V1 ReactJs

java - 没有数据时应该返回哪个http代码

batch-file - 在没有出现超时消息的情况下在批处理文件中运行超时命令

amazon-web-services - AWS GLUE 数据导入问题

php - Laravel paginate 无法在 querybuilder 上选择某些列

r - 计算 R 中分类变量的出现次数