ap 在 Haskell 中如何以及为何被定义为 liftM2 id

2024-03-20

在试图更好地理解 Applicative 的同时,我查看了 的定义,它往往被定义为 ap,而 ap 又被定义为:

ap                :: (Monad m) => m (a -> b) -> m a -> m b
ap                =  liftM2 id

查看 liftM2 和 id 的类型签名,即:

liftM2  :: (Monad m) => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r
id                      :: a -> a

我无法理解仅仅通过传递 id,类型签名的相关部分似乎就从(a1 -> a2 -> r) -> m a1 to m (a -> b)。我在这里缺少什么?


类型变量a from id可以以任何类型实例化,在本例中该类型是a -> b.

所以我们正在实例化id at (a -> b) -> (a -> b)。现在是类型变量a1 from liftM2正在实例化于(a -> b), a2正在实例化于a, and r正在实例化于b.

综合起来,liftM2被实例化于((a -> b) -> (a -> b)) -> m (a -> b) -> m a -> m b, and liftM2 id :: m (a -> b) -> m a -> m b.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ap 在 Haskell 中如何以及为何被定义为 liftM2 id 的相关文章

  • Haskell:找不到模块“Data.List.Split”

    我正在尝试在 Haskell 中拆分列表 据我所知 最简单的方法是splitOn 但是这个函数需要Data List Split 所以我尝试运行import Data List Split在前奏曲中 但是 我收到以下错误 Could not
  • 导入 Haskell 模块

    我是哈斯克尔的新手 为什么当我尝试使用时Days from Data Time我收到此错误 Could not find module Data Time It is a member of the hidden package time
  • 在 Haskell 中增长数组

    我想在 Haskell 中实现以下 命令式 算法 给定一个序列对 e0 s0 e1 s1 e2 s2 en sn 其中 e 和 s 部分不一定是自然数不同的是 在每个时间步都会随机选择该序列的一个元素 例如 ei si 并根据 ei si
  • Haskell 下划线与显式变量

    我已经学习 Haskell 几个星期了 我有一个关于下划线的使用的问题 作为函数参数 我认为用一个具体的例子来问我的问题会更好 假设我想定义一个函数 根据提供的索引提取列表的元素 是的 我意识到 已经是预先定义的 我可以定义该函数的两种方法
  • Haskell scala 互操作性

    我是 Scala 初学者 来自面向对象范式 在了解 Scala 的函数式编程部分时 我被引导到 Haskell 纯函数式编程语言 探索 SO 问题答案 我发现 Java Haskell 具有互操作性 我很想知道 Scala Haskell
  • 我应该在 Turtle 或 Foldl 包中使用折叠吗?

    我在使用 Turtle 时遇到了一些困难 直到盯着难以理解的错误消息几分钟后才意识到我使用了错误的fold功能 https hackage haskell org package turtle 1 5 8 docs Turtle Shell
  • 在 Haskell 中,为什么我必须在这段代码中使用美元符号?

    我仍在尝试破解这段代码 import Data Char groupsOf groupsOf n xs take n xs groupsOf n tail xs problem 8 x maximum map product groupsO
  • 搜索重写规则

    有什么办法可以浏览或搜索重写规则吗 当我使用像这样的标志时 ddump rule firings or ddump rule rewrites我只是得到了触发的规则的名称以及它引起的重写 但没有得到实际的规则本身 理想情况下 我想通过 GH
  • 将 num 的签名键入 double?

    我才刚刚开始为你学习 Haskell 以获得伟大的好处 并且我在类型类方面遇到了一些麻烦 我想创建一个接受任何数字类型并强制其为双精度的函数 我的第一个想法是定义 numToDouble Num gt Double 但我认为这不起作用 因为
  • 将两个 Int 值相除以获得 Float 的正确方法是什么?

    我想分两份IntHaskell 中的值并获得结果Float 我尝试这样做 foo Int gt Int gt Float foo a b fromRational a b 但 GHC 版本 6 12 1 告诉我 无法将预期类型 Intege
  • 使用 FoldLine 解析多个块

    对于这个简化的问题 我试图解析一个如下所示的输入 foo bar baz quux woo hoo xyzzy glulx into foo bar baz quux woo hoo xyzzy glulx 我尝试过的代码如下 import
  • 如何在 Haskell 中漂亮地打印表格?

    我想在 Haskell 中漂亮地打印一个类似表格的数据结构 列列表 例如 Table StrCol strings a bc c IntCol ints 1 30 2 DblCol doubles 2 0 4 5 3 2 应该渲染类似 st
  • Haskell / GHC - 是否有“警告不完整模式”的中缀标签/编译指示

    我正在寻找一个可以对特定的不完整模式发出警告的编译指示 它会使编译器失败并显示以下 假设的 代码 FAILIF incomplete patterns f Int gt Int f 0 0 我正在尝试使用 Arrows 编写一个 编译器 并
  • 如何在haskell中获取变量名称

    我来到 haskell 时有一些 c 背景知识 想知道是否有类似的 define print a printf s d n a a int a 5 print a 应该打印 a 5 这是 augustss 提到的 TH 解决方案 LANGU
  • 为什么 ZipList 不是 List 的默认应用实例

    我目前正在学习 Haskell 中的应用程序 如果我没记错的话 列表有两个不同的应用实例 List and ZipList 第二个被定义为包装列表值的新类型 这ZipList应用实例对我来说似乎更直观 这可能是一个愚蠢的问题 但有具体原因吗
  • 如何在Haskell中实现词法分析器和解析器

    我在这里得到了这段代码 它是用Haskell结构的命令式编程语言编写的程序 所以问题是 我如何为这种语言实现词法分析器和解析器 该程序被定义为一系列语句有 6 种类型 goto write stop if goto 和 int int n
  • 类型级别集结合律的证明

    我试图证明类型级函数Union https hackage haskell org package type level sets 0 8 5 0 docs Data Type Set html t Union是关联的 但我不确定应该如何完
  • C++ 概念与 Haskell 类型类有何不同?

    Concepts TS 中的 C 概念最近已合并到 GCC 主干中 概念允许人们通过要求类型满足概念的条件 例如 可比较 来约束通用代码 Haskell 有类型类 我对 Haskell 不太熟悉 概念和类型类如何相关 概念 由概念 TS 定
  • 迭代打印列表中的每个整数

    假设我有一个整数列表l 1 2 我想打印到stdout Doing print l产生 1 2 假设我想打印不带大括号的列表 map print l产生 No instance for Show IO arising from a use
  • 我是否需要采取明确的操作来促进与持久数据结构的共享?

    我来自命令式背景 正在尝试实现一个简单的不相交集 并集查找 数据结构 以获得在 Haskell 中创建和修改 持久 数据结构的一些练习 目标是有一个简单的实现 但我也关心效率 我的问题与此相关 首先 我创建了一个按等级并集的不相交集森林实现

随机推荐

  • 按属性对对象数组进行排序

    我从数据库中有这个集合 var items Name Michael TypeId 1 Name Max TypeId 1 Name Andre TypeId 1 Name Georg TypeId 2 Name Greg TypeId 3
  • 添加具有实现的特征方法是否会破坏向后兼容性?

    添加方法时我对向后兼容性感到困惑使用默认实现到一个特质 喜欢 以前的版本 trait Foo 新版本 trait Foo def verifyConsistency Option String provide default impleme
  • 我们如何根据 React Native 中的列表项内容为 FlatList 提供自动高度

    我在我的组件中使用 FlatList 它工作正常 所需要的是我的整个屏幕应该有一个自动高度 并且 FlatList 内容永远不会超出屏幕高度 此外 FlatList 的高度应根据其中的内容 项目进行更改 而不是给出任何固定高度 如何实现自动
  • 如何将人声转换为数字格式?

    我正在开展一个使用生物识别系统来保护系统的项目 我们计划使用人声来保护系统 想法是让人们说出一些单词或句子 系统将以数字格式存储该语音 下次人们想要进入系统时 他 她必须说出一些单词 这些单词可能与之前使用的单词不同 也可能没有不同 我们不
  • 属性模式的优点和缺点是什么?

    史蒂夫 叶格描述了属性模式 in a 博客文章 http steve yegge blogspot com 2008 10 universal design pattern html Property of his 对于使用 C 或 Jav
  • 如何监控 iOS 模拟器的网络调用

    我正在尝试像 Firebug 一样监视从应用程序到我的服务器的调用 我找不到在 iOS Simulator 或 xCode 中查看该内容的方法 有没有办法在不嗅探所有流量的情况下做到这一点 如果没有 您建议使用什么工具 就我个人而言 我使用
  • 射线交叉未击中目标

    我正在尝试选择一个 3d 点 我阅读了各种网站 但我的代码不起作用 鼠标右键单击 glGetFloatv GL MODELVIEW MATRIX mv mat glGetFloatv GL PROJECTION MATRIX p mat i
  • C# Assert.AreNotEqual 与 Equals

    在尝试向自己验证 C Equals for IEnumerables 是一个引用 equals 时 我发现了一些奇怪的东西 在 NUnit 中进行以下设置 var a IEnumerable
  • QNetworkAccessManager没有完成信号

    我想直接请求和响应而不是使用connect SLOT finished SLOT 您可以使用QEventLoop以便应用程序等待并可以同时处理其他事件 include
  • 在 Cocoa 中获得机器唤醒+用户登录通知的可靠方法?

    我尝试过注册NSWorkspaceDidWakeNotification with NSNotificationCenter defaultCenter 但当我的 MacBook Pro 从睡眠状态唤醒时 它永远不会触发 我注册了其他通知
  • Kotlin:如何绕过 CancellationException

    我正在将一些旧的 RxJava 代码移植到协程中 使用 RxJava 我可以在我的活动中执行此操作 someBgOperation as AutoDispose autoDisposable AndroidLifecycleScopePro
  • PHP – setcookie() 不起作用

    我有这个页面 它设置一个 cookie 并在您选中复选框时回显一个字符串 字符串打印正确 但 cookie 从未被设置 我不知道为什么
  • 如何启用Windows 10“容器”功能?

    使用最新的 Windows 10 Fast Ring build 14316 在 VMware 虚拟机内 我试图使桌面应用程序转换器 https msdn microsoft com windows uwp porting desktop
  • 编码/gob 和编码/json 之间的区别

    我正在用 Go 编写一个应用程序 它使用编码 gob 在节点之间通过 UDP 发送结构和切片 它工作正常 但我注意到encoding json也有类似的API 搜索了一下 发现了这个信息 https golang org pkg encod
  • 使用 Spring Security (Spring Boot 3.0.2) 时如何访问 H2 控制台?

    所以我正在尝试学习 Spring 因为今年晚些时候我的一个项目将需要它 项目使用 Spring Boot 3 0 2 和 Java 17 我还使用 Spring Security 依赖项 这意味着我需要在不使用令牌的情况下授权某些 URL
  • 使用 X509certificate2 进行 RSA 加密和解密

    所以 我接下来需要的是 创建用于开发的证书 为客户端获取一份证书 为服务器获取一份证书 通过API检索客户端编码的密码并在服务器上解码 现在 我成功创建了以下证书这个链接 https blog jayway com 2014 09 03 c
  • 禁用屏幕键盘

    我正在为嵌入式应用程序开发 Windows 应用商店应用程序 其中唯一的输入设备是小型触摸屏 因此 我正在开发自己的数字和文本输入控件 它们与应用程序的视觉外观相匹配 并且在小屏幕上工作得更好 当文本框获得焦点时 是否可以防止 Window
  • num2cell() 的 python/numpy 等价物是什么?

    我很不幸能够通过 numpy 数组将一些 MATLAB 代码转换为 Python 有没有共识num2cell 就我个人而言 我认为这违背了 Python numpy 语法 这个想法是这样的 Using num2cell 你最终会得到一个看起
  • Spring中指定默认属性值为NULL

    我想在 Spring XML 配置文件中定义默认属性值 我希望这个默认值是null 像这样的东西
  • ap 在 Haskell 中如何以及为何被定义为 liftM2 id

    在试图更好地理解 Applicative 的同时 我查看了 的定义 它往往被定义为 ap 而 ap 又被定义为 ap Monad m gt m a gt b gt m a gt m b ap liftM2 id 查看 liftM2 和 id