n 元函数的 Uncurry

2023-11-30

我有一个类型级别的数字

data Z   deriving Typeable
data S n deriving Typeable

和 n 元函数(来自固定向量包的代码)

-- | Type family for n-ary functions.
type family   Fn n a b
type instance Fn Z     a b = b
type instance Fn (S n) a b = a -> Fn n a b

-- | Newtype wrapper which is used to make 'Fn' injective. It's also a
--   reader monad.
newtype Fun n a b = Fun { unFun :: Fn n a b }

我需要像这样的功能

uncurryN :: Fun (n + k) a b -> Fun n a (Fun k a b)

我读了几篇关于类型级别计算的文章,但都是关于类型安全列表串联的。


这在打开/重新包装时需要小心一些Fun新类型。我还利用了DataKinds扩大。

{-# LANGUAGE DataKinds, KindSignatures, TypeFamilies, 
    MultiParamTypeClasses, ScopedTypeVariables, FlexibleInstances #-}
{-# OPTIONS -Wall #-}

-- | Type-level naturals.
data Nat = Z | S Nat

-- | Type family for n-ary functions.
type family   Fn (n :: Nat) a b
type instance Fn Z     a b = b
type instance Fn (S n) a b = a -> Fn n a b

-- | Addition.
type family   Add (n :: Nat) (m :: Nat) :: Nat
type instance Add Z          m = m
type instance Add (S n)      m = S (Add n m)

-- | Newtype wrapper which is used to make 'Fn' injective.
newtype Fun n a b = Fun { unFun :: Fn n a b }

class UncurryN (n :: Nat) (m :: Nat) a b where
    uncurryN :: Fun (Add n m) a b -> Fun n a (Fun m a b)

instance UncurryN Z m a b where
    uncurryN g = Fun g

instance UncurryN n m a b => UncurryN (S n) m a b where
    uncurryN g = Fun (\x -> unFun (uncurryN (Fun (unFun g x)) :: Fun n a (Fun m a b)))

{- An expanded equivalent with more signatures:

instance UncurryN n m a b => UncurryN (S n) m a b where
    uncurryN g = let f :: a -> Fn n a (Fun m a b)
                     f x = let h :: Fun (Add n m) a b
                               h = Fun ((unFun g :: Fn (Add (S n) m) a b) x)
                           in unFun (uncurryN h :: Fun n a (Fun m a b))
                     in Fun f
-}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

n 元函数的 Uncurry 的相关文章

  • 在 Haskell 中证明“没有腐败”

    我所在的行业对安全要求很高 我们的软件项目一般都会有安全要求 我们必须证明该软件具有高度确定性 通常这些都是负面的 例如 腐败的频率不得超过 1 我要补充的是 这些要求来自统计系统安全要求 损坏的根源之一显然是编码错误 我想使用 Haske
  • Haskell 中的参数数量和无点 [重复]

    这个问题在这里已经有答案了 对于多重模式匹配 不同数量的参数是不可能的 即使是无点的 foo True b b 2 foo id 例如 不起作用 但 foo True 2 foo id 做 有时我们只能在函数的一部分使用 point fre
  • 仪器化状态单子

    我正在努力给予Monad and MonadState的实例State 计算的数量 gt gt return get and put运营 data Counts Counts binds Int returns Int gets Int p
  • 当单态限制打开*时,如何解决歧义问题?

    因此 在学习 Haskell 时 我很快就遇到了可怕的单态限制 在 ghci 中 Prelude gt let f print show Prelude gt f 5
  • 在 Haskell 中,如何将嵌套上下文中的函数“应用”到上下文中的值?

    nestedApply Applicative f Applicative g gt g f a gt b gt f a gt g f b 正如类型所示 如何获得 a gt b 应用于那个a在上下文中f 感谢帮助 这是关注类型很有帮助的情况
  • Haskell:如何创建将函数应用于元组项的最通用函数

    这是一个个人练习 旨在更好地理解 Haskell 类型系统的局限性 我想创建最通用的函数 将某些函数应用于 2 条目元组中的每个条目 例如 applyToTuple fn a b fn a fn b 我试图让这个函数在以下每种情况下都起作用
  • 为什么这会导致 Haskell Conduit 库内存泄漏?

    我有一个conduit https hackage haskell org package conduit管道处理长文件 我想每 1000 条记录为用户打印一份进度报告 所以我这样写 Every n records perform the
  • 在 Haskell 中对单位的组成(例如英寸、美元等)进行建模

    跟进自我之前的一个问题 https stackoverflow com q 73375273 222529 我问如何创建一个可以对单元进行建模的类型 例如Inch 作为 Haskell 中的一种类型 我现在面临的问题是如何对该单元和其他单元
  • Haskell:处理死锁的自引用列表

    GHC 允许永久阻止以下内容是否有任何有用的理由 list 1 tail list 看起来列表迭代器 生成器有点复杂 我们应该能够做一些更有用的事情 Return error Infinitely blocking list Return
  • Haskell 单例:我们可以通过 SNat 获得什么

    我正在尝试使用 Haskell 单例 在论文中使用单例进行依赖类型编程 http cs brynmawr edu rae papers 2012 singletons paper pdf并在他的博客文章中单例 v0 9 发布 https t
  • 应用交换律

    带有效果的应用程序编程 http staff city ac uk ross papers Applicative html麦克布莱德和帕特森的论文提出了互换法 u lt gt pure x pure f gt f x lt gt u 为了
  • 使用 Haskell 的欧拉项目 #1

    import Data Set euler Int euler sum x x lt nums where nums Data Set toList Data Set union Data Set fromList 3 6 999 Data
  • 副作用是纯函数中找不到的一切吗?

    可以肯定地说 以下二分法成立 每个给定的函数是 要么纯粹 或有副作用 如果是这样 函数的 副作用就是纯函数中找不到的任何东西 这很大程度上取决于您选择的定义 可以公平地说 函数是pure or impure 纯函数始终返回相同的结果并且不会
  • Haskell 真的是纯粹的吗(有任何语言可以处理系统外的输入和输出)吗?

    在谈到函数式编程中的 Monad 后 该功能是否真的使语言变得纯粹 或者它只是黑板数学之外的现实世界中计算机系统推理的另一张 免狱卡 EDIT 这不是有人在这篇文章中所说的火焰诱饵 而是一个真正的问题 我希望有人能用它来击倒我并说 证明 它
  • 算法 - 如何有效删除列表中的重复元素?

    有一个list L 它包含以下元素任意类型each 如何有效删除此类列表中的所有重复元素 必须保留订单 只需要一个算法 因此不允许导入任何外部库 相关问题 在Python中 从列表中删除重复项以使所有元素都是唯一的最快算法是什么在维持秩序的
  • 表达式“ap zip tail”如何工作

    我想知道怎么写f x zip x tail x 点免费 所以我使用了pointfree程序 结果是f ap zip tail ap作为 Control Monad 的函数 我不明白点自由定义是如何工作的 如果我能从类型的角度去理解的话 希望
  • 可以通过Data.Function.fix来表达变形吗?

    我有这个可爱的fixana这里的函数执行速度比她的姐妹快 5 倍左右ana 我有一个criterion报告支持我这一点 ana alg Fix fmap ana alg alg fixana alg fix f gt Fix fmap f
  • Haskell 二进制解析

    我一直在尝试在 haskell 中实现一个协议解析器 而且我对这门语言还很陌生 特别是当涉及到 monad 时 我一直在使用binary 0 5 0 2 并描述了协议的标头和所有有效负载 我想要解析的消息如下所示 header payloa
  • 处理许多不相关的类型时避免样板

    我正在编写处理以下值的代码语言 扩展 注释 语法 http hackage haskell org packages archive haskell src exts 1 1 4 doc html Language Haskell Exts
  • Haskell 中的相互递归求值器

    Update 我已经添加一个答案 https stackoverflow com questions 3524485 mutually recursive evaluator in haskell 4504200 4504200这描述了我的

随机推荐

  • 在从 stdin 读取的 while 循环中捕获 EOF 字符[重复]

    这个问题在这里已经有答案了 下面的代码从stdin逐个字符地传输 直到遇到 EOF 符号 CTRL D 但是 当我执行 CTRL D 命令时 它不会将其处理为 EOF 字符 include
  • PostgreSQL - 获取每个 GROUP BY 组中列的最大值的行

    我正在处理一个 Postgres 表 称为 lives 其中包含包含 time stamp usr id transaction id 和 lives remaining 列的记录 我需要一个查询 该查询将为我提供每个 usr id 的最近
  • Facebook Graph API tagged_places 返回空数组

    我正在尝试获取用户标记地点但数组总是返回空 如果我通过图形浏览器并生成一个令牌 那么我会得到预期的结果 但使用应用程序中生成的访问令牌我会返回一个空数组 我要求用户标记地点许可 我知道由于此许可要求 我的应用程序必须接受审查 但我现在只是使
  • html5 canvas弹性碰撞方块

    我重新问这个问题是因为我在上一个问题中没有明确说明我想要什么 有谁知道如何使用矩形在 Canvas 中进行弹性碰撞或处理碰撞 或者能给我指出正确的方向吗 我创建了一个具有多个正方形的画布 并希望每个正方形在接触时发生偏转 这是我整理的一个快
  • 写入 selenium 数据时 CSV 为空

    我正在第一次体验 Selenium 并在一个著名的视频平台上做了一些教程 大多数时候它工作得相当可靠 但是 我遇到了一些问题 创建了 CSV 但未导出数据 CSV 被 触及 但它不会导出正常打印中显示的数据 谁能帮我看看这个脚本的问题出在哪
  • AngularJS 文本区域按 Enter 键换行

    我正在开发一个 AngularJS 应用程序 就像我们在 stackoverflow 上发布答案和问题一样 我们可以在文本区域下方实时预览答案或问题 这是我的试用代码 索引 html div div
  • FormData.get 函数未定义

    FormData get 在 Chrome 中未定义 https developer mozilla org en US docs Web API FormData get 默认情况下 Chrome 不支持 get 方法 以及delete
  • 使用 PDFBox 从 PDF 中读取某些 unicode 字符时出现问题

    我是 PDFBOX 新手 我正在阅读印地语的 PDF 文件 我在使用 PDFBox 从 PDF 中读取某些 unicode 字符时遇到问题 我想将字符串复制到 java 对象中 以便我可以处理它 我尝试了一些方法来读取文件 1 我尝试使用P
  • 如何在分组项目页面中每组之前插入图像列表?

    我目前正在使用 XAML 和 C 开发 Windows 8 应用程序 我开发了动态生成数据组的分组项目页面 我有一个社交媒体图标列表 我需要将其放在每个组标题旁边 但在左侧对齐 如屏幕截图所示 当我在 XAML 代码中添加列表时 它会在第一
  • Makefile c++11 支持

    我最近开始了一个 C 的小项目 我创建了一个简单的 Makefile CC g CFLAGS std c 0x I c VPATH src include vpath c src vpath h include TabooSearch ma
  • 如何在 Visual Studio 中连接到 MySQL 数据源

    我用MySQL 连接器 网络通过引用程序集 MySql Data dll 并传入连接字符串来连接到我的数据库MySqlConnection 我喜欢这样 因为我不需要安装任何东西 有没有办法在 Visual Studio 2010 中 选择数
  • 为什么我会遇到找不到类异常

    我在用DeferredTextImpl类和 eclipse 似乎没有抱怨它 但是当我运行我的项目时 我得到运行时异常 Class not found exception for DeferredTextImpl 当我搜索类文件时 我发现它在
  • 如何在 Objective C 中使用 AssetLibrary 检索视频的文件大小

    我想知道如何使用 AssetLibrary 检索视频的文件大小 有人能指出我正确的方向吗 或者可能有一些代码片段 这应该会让你走上正轨 看资产库框架参考 void logVideoSizes void assetEnumerator ALA
  • 为什么 xUnit Runner 找不到我的测试

    我有一个 xUnit net 测试如下 static class MyTestClass Fact static void MyTestMethod VS 2012 的 xUnit 插件说 没有发现可以运行的测试 TestDriven ne
  • ASP.NET MVC 中的 ELMAH 和异常管理

    我正在考虑从企业库中的异常管理应用程序块转移到新的 ASP NET MVC 站点 Scott Hansleman 在 ELMAH 上的帖子引起了我的注意 但我并不完全理解这种方法 通常 我会抑制一些异常 可恢复的异常 将它们记录在中央存储库
  • 在python中读取TDMS文件如何使用tdms info命令?

    我想知道Labview生成的tdms文件的内容是什么 按照此site 我用Python写 import numpy as np from nptdms import TdmsFile from nptdms import tdms read
  • 在外部网站上自动填写和提交表格

    我想知道一个人如何自动填写多个表格 使用bot local server 使用ajax或curl在外部站点 PHP 的多个页面上 例如一个网站www abc com index php有一个表格
  • 配置.vimrc时如何映射命令键?

    我使用 mac 我想配置 vimrc 例如 map
  • 模拟时间序列

    在最近的宏观经济预测在线课程中 有一个建模练习 y t 3 0 0 55 y t 1 e t where e t 定义为 et lt c 1 2138662 0 2854597 0 5902700 0 8285463 0 9954260 0
  • n 元函数的 Uncurry

    我有一个类型级别的数字 data Z deriving Typeable data S n deriving Typeable 和 n 元函数 来自固定向量包的代码 Type family for n ary functions type