Haskell 中带有元组参数的函数组合[重复]

2024-03-06

有时我有两种形式的函数:

f :: a -> (b1,b2)
h :: b1 -> b2 -> c

我需要组合物 g。我通过将 h 更改为 h' 来解决这个问题:

h' :: (b1,b2) -> c

你能告诉我(如果可能的话)一个函数 m 吗,这样:

(h . m . f) == (h' . f)

或者用另一种方法来处理这种情况。谢谢。


你想要做的是获取一个运行的函数curried论据,h,并将其应用到结果f,这是一个元组。这一过程将两个参数的函数转换为采用一个元组参数的函数,称为非柯里化。我们有,从数据元组 http://hackage.haskell.org/packages/archive/base/4.3.1.0/doc/html/Data-Tuple.html:

curry :: ((a, b) -> c) -> a -> b -> c 
   -- curry converts an uncurried function to a curried function.

uncurry :: (a -> b -> c) -> (a, b) -> c
   -- uncurry converts a curried function to a function on pairs.

所以现在我们可以写:

f :: a -> (b,c)
f = undefined

h :: b -> c -> d
h = undefined

k :: a -> d
k = uncurry h . f

另一个棘手的思考方式是通过应用函子,

k = (h <$> fst <*> snd) . f

Conor McBride 的想法,他将其写为:(|f fst snd|) . f我认为。

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

Haskell 中带有元组参数的函数组合[重复] 的相关文章

随机推荐

  • PUT 请求中的 100-Continue 是什么意思?

    我在某些 PUT 请求 上传文件 中看到 Expect 100 continue 这是什么意思 应该发生的情况是 您应该发送带有以下内容的请求标头 Expect 100 continue 标头 然后 在发送标头之后 发送有效负载之前 您应该
  • Xcode Beta3 中的 CMutablePointer 和 CConstPointer 发生了什么?

    Xcode Beta3 中的 CMutablePointer 和 CConstPointer 发生了什么 在 Beta2 中成功编译的代码失败并出现错误 Use of undeclared type CMutablePointer 分别使用
  • SetConsoleCtrlHandler例程问题

    我正在用 C 编写一个控制台应用程序 我使用 SetConsoleCtrlHandler 来捕获关闭和 CTRL C 按钮 这允许我的所有线程正确停止和退出 其中一个线程执行一些需要一些时间才能完成的保存 并且我有一些代码需要在控制台 cr
  • 动态函数列表并动态调用它们

    我希望能够将各种静态方法存储在列表中 然后查找它们并动态调用它们 每个静态方法都有不同数量的参数 类型和返回值 static int X int int static string Y int int string 我想要一个可以将它们全部
  • 如何在Android中获取远程设备自定义蓝牙名称?

    我想在 Android 中检索远程蓝牙设备的自定义名称 我说的是在 设置 蓝牙 和配对设备下的手机设置中找到的名称 例如 我有一个名为 DoorControl 的远程蓝牙设备 在 设置 gt 蓝牙 gt 配对设备 下 我已将设备重命名为 C
  • 为什么以及何时创建多模块 Maven 项目?

    我有一个关于 Maven 多模块项目的一般性问题 何时以及为什么要这样做 Esko Luontola 的回答 将项目拆分为多个模块很有用 例如 这些模块需要单独部署 可能会被误解 如果您有要单独部署的模块 则情况恰恰相反 在这种情况下 您永
  • 尝试让网络错误警报显示在 iPhone 应用程序上?

    好的 我正在尝试让这个应用程序显示网络错误警报代码 我添加了 SystemConfiguration framework 框架和 Apple 的 Reachability 示例代码 这是 viewcontroller h 文件 import
  • 使用一个查询更新多行?

    我在这里发现了一些可以更新一个字段的东西 http www karlrixon co uk articles sql update multiple rows with Different values and a single sql q
  • 将空格分隔的条目拆分为 R 中的新列

    我正在编写一项输出 csv 文件的调查 在此 csv 中 我有一些以空格分隔的条目 它们代表多选问题 例如具有多个答案的问题 最后 我想将这些空格分隔的条目解析到它们自己的列中 并为它们创建标题 这样我就知道它们来自哪里 例如 我可以从此开
  • MongoDB 将两个数组内的值相乘

    我需要帮助将对象数组中的值相乘以获得输出 这是我的 JSON 1 id ObjectId 5b919a785cb288f7d5311846 nome Antonio cod produtor PR001 morada rua Rua dos
  • 强制聚合之间不变量的最佳方法?

    处理聚合之间一致性的最佳方法是什么 以 Vaughn Vernon 书中的示例为例 您有 BacklogItem 聚合和 SprintAggregate 当 BacklogItemEvent 引发时 事件处理程序会捕获它并尝试更新 Spri
  • SKLabelNode 删除前导和尾随空格 - 我怎样才能阻止它?

    我想创建一个 SKLabelNode 它应该始终具有相同的长度 对于猜词游戏 不幸的是 SKLabelNode 决定始终切断任何前导和尾随空格 文档中未描述此行为 我怎样才能避免 关闭这种行为 如果您只是想让标签对齐以便它们右对齐 那么请使
  • WPF TreeView:如何使控件相对于每个 TreeViewItem 对齐,但仍然获得标题文本的缩进效果?

    这是我想要实现的目标的直观想法 我希望左侧和右侧的所有按钮都垂直对齐 无论 TreeViewItem 位于树中的哪个位置 我在实现这种效果时遇到了困难 同时也让标题以典型的嵌套方式缩进 我最近的尝试涉及修改 TreeViewItem 模板
  • 重新打开最近关闭的 Excel 实例

    如果我使用下面的代码关闭当前打开的所有 Excel 实例 我需要使用什么来重新打开刚刚关闭的所有 Excel 实例 我知道我必须更改以下内容才能将文件路径保存在某处 但只是不确定实际的代码应该是什么 Public Sub CloseAllE
  • 如何从 Ubuntu 中删除 Elasticsearch?

    我认为我已经从我的计算机中删除了elasticsearch 但我仍然有一些疑问 当我输入 service elasticsearch status I get elasticsearch service 已加载 未找到 原因 没有此类文件或
  • WOWZA + RTMP + HTML5 播放?

    我有 Wowza 并测试 RTMP 流 现在就像 Wowza RTMP 示例一样 我现在可以 Playback via Flash http www wowza com gettingstarted http www wowza com g
  • 正则表达式 - 查找字符串中的特定数字

    我一整天都在与正则表达式作斗争 找不到解决方案 我试图在包含数字 分号 冒号和空格的字符串中找到一些特定的数字 出于我们的目的 假设我正在寻找号码1234 以下是一些应该匹配的示例 每一行都是不同的字符串 1234 1234 1234 56
  • 缺乏释放会导致什么样的问题?

    我目前遇到问题 glibc detected efit free invalid next size fast 0x00000000006127f0 带有通常的内存映射和回溯信息glibc错误 但是 我无法找到这个问题的原因 看起来 基本上
  • 我如何在 SQL SERVER 2008 中使用 Active Directory 用户进行身份验证但没有 Windows 身份验证

    在网上查阅了很多资料后 我找不到解决方案 我希望你理解我 我的英语不是最好的 Issue 我想使用域 活动目录 的有效用户对 SQL Server 进行身份验证 该用户是从我的应用程序 旧应用程序 的登录名 用户名和密码 中获取的 登录到我
  • Haskell 中带有元组参数的函数组合[重复]

    这个问题在这里已经有答案了 有时我有两种形式的函数 f a gt b1 b2 h b1 gt b2 gt c 我需要组合物 g 我通过将 h 更改为 h 来解决这个问题 h b1 b2 gt c 你能告诉我 如果可能的话 一个函数 m 吗