用于 GADT 的 makeLenses (Haskell)

2023-11-26

是否有相当于makeLenses对于 GADT?如果我有一个简单的GADT like:

data D a b where
  D :: (Ord a, Ord b) => !a -> !b -> D a b

有没有办法通过传入构造函数和字段名称列表来自动生成镜头?


我不认为它可以自动完成,但在这种特殊情况下手动编写一些镜头并不难:

{-# LANGUAGE GADTs #-}

import Control.Lens

data D a b where
  D :: (Ord a, Ord b) => !a -> !b -> D a b

field1 :: Lens' (D a b) a
field1 f (D x y) = fmap (\x' -> D x' y) (f x)

field2 :: Lens' (D a b) b
field2 f (D x y) = fmap (\y' -> D x y') (f y)

{- If you want type-changing lenses, you can also use these signatures.
 - Note that then the target type Ord constraint has to escape.

field1 :: (Ord a2) => Lens (D a1 b) (D a2 b) a1 a2
field2 :: (Ord b2) => Lens (D a b1) (D a b2) b1 b2
 -}

似乎有一些相关GitHub问题,其中克梅特声称他们无法为存在量化的领域创造镜头。

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

用于 GADT 的 makeLenses (Haskell) 的相关文章

  • 为什么 Haskell 中的点是从右向左排列的?

    如果我们有两个函数 f and g 然后在哈斯克尔h f g相当于h x f g x IE 这些函数从右到左应用于输入 有什么根本原因可以解释为什么它是从右到左 而不是从左到右吗 IE 他们为什么不做h f g相当于h x g f x 反而
  • Parsec 函数“parse”和类“Stream”的类型签名

    约束条件是什么 Stream s Identity t 下面的类型声明是什么意思 parse Stream s Identity t gt Parsec s a gt SourceName gt s gt Either ParseError
  • Haskell 类型定义,=> 等

    我正在使用 Learn You a Haskell 来学习 Haskell 第 54 页上有一个 像这样执行 take Num i Ord i gt i gt a gt a take n n lt 0 take take n x xs x
  • Haskell cabal:我刚刚安装了软件包,但现在找不到软件包

    在这里 http haskell org haskellwiki Cabal Install I just installed packages 2C but now the packages are not found这是我可以找到我正在
  • 是否有适用于 Haskell 或 Scala 等函数式语言的 LL 解析器生成器?

    我注意到明显缺乏用函数式语言创建解析器的 LL 解析器 我一直在寻找但没有成功的理想发现是为 ANTLR 风格的 LL 语法生成 Haskell 解析器 语法的模小数重新格式化 并且令我惊讶的是 每个最后一个解析器生成器都具有函数我发现的语
  • 为什么 Haskell (Hugs) 中的 Show 实例会导致堆栈溢出错误?

    下面是 Haskell 中的多态数据类型 由 Hugs 解释 我正在尝试创建一个 Show for Equality 的实例 实例声明表示 如果类型 a 在 Show 中 则相等 a 在 Show 中 它应该以 a b 的形式打印构造函数
  • 有 Haskell 日期库吗?

    Haskell 中是否有一个函数允许我输入日期的组成部分 如字符串表示形式或日月年组成部分 我可以从中获取信息 如星期几 一个月中的天等 我在网上查了一下 看起来有很多自定义库 但我希望 ghci 10 6 4 的标准前奏库中有一个没有很好
  • 系统地将函数应用于 haskell 记录的所有字段

    我有一条包含不同类型字段的记录 以及一个适用于所有这些类型的函数 举一个小 愚蠢 的例子 data Rec Rec flnum Float intnum Int deriving Show 比如说 我想定义一个为每个字段添加两条记录的函数
  • `arr fst` 是如何自然变换的?

    I asked 这个问题 https stackoverflow com q 62733726 11143763不久以前 这是关于以下箭头定律 arr fst first f f arr fst Category k gt k b c gt
  • ~/.cabal/config 中的“共享”是什么意思?

    我想 共享 会让cabal install更快 对吧 共享的默认值为 False 我们应该使用 True 还是 False 来共享 thanks 这意味着 还构建动态链接 又名共享 版本的库 这些版本与cabal install cabal
  • 在类型级别未定义

    通常 当我使用 Haskell 代码时 我会使用类型注释将内容存根并undefined foo String gt Int foo undefined 是否有类型级别的 未定义 我可以以类似的方式使用 理想情况下 与某种注释结合使用 typ
  • 如何在 Haskell 中创建异构列表? (最初是Java)

    如何将以下 Java 实现转换为 Haskell 这里的主要目的是拥有一个包含作为特定接口的子类型的各种元素的列表 我尝试制作下面的 Haskell 版本 但未能达到我的目的 这里的重点是xs有类型 Bar 而不是Foo a gt a 这是
  • Haskell Stack 包安装错误

    user stack install dictionaries Error While constructing the build plan the following exceptions were encountered In the
  • 如何从有向无环图导出FRP?

    我目前正在研究我的下一个项目 目前处于预规划阶段 因此这个问题只是为了了解现有技术的概述 Setup 我有一个具有多个输入和输出的有向无环图 DAG 现在考虑人工神经网络 处理这种结构的常见方法是在每个 时间 步骤上处理整个网络 我相信这是
  • 为什么 Kleisli 不是 Monoid 的一个实例?

    如果您希望附加两个类型 a gt m b 的函数 以便只得到一个附加两个结果的相同类型的函数 您可以使用 Kleisli 来执行此操作 instance Monad m Monoid b gt Monoid Kleisli m a b wh
  • Haskell 中存在量化值的列表

    我想知道为什么这段代码不进行类型检查 LANGUAGE ScopedTypeVariables Rank2Types RankNTypes OPTIONS fglasgow exts module Main where foo forall
  • 不明确的类型变量

    相关我之前关于遍历数据结构的问题 https stackoverflow com questions 1855371 avoiding boilerplate when dealing with many unrelated types 当
  • 优化计算 200 万以下所有素数总和的 Haskell 代码

    欧拉计划中的问题 10 我在那里看到了一些讨论 但仅限于 C 我用下面的代码来计算 print sum sieve 2 2000000 where sieve sieve x xs x sieve filter 0 mod x xs 需要很
  • 我必须实现 Applicative 和 Functor 来实现 Monad

    我正在尝试实现一个 Monad 实例 作为一个更简单的示例 假设如下 data Maybee a Notheeng Juust a instance Monad Maybee where return x Juust x Notheeng
  • 如何在 Haskell 中编写 MST 算法(Prim 或 Kruskal)?

    我可以用 C 或 Java 编写 Prim 和 Kruskal 算法来查找最小生成树 但我想知道如何在 Haskell 中以 O mlogm 或 O mlogn 实现它们 纯函数式程序更好 多谢 正如斯文宁森所说 优先搜索队列 http h

随机推荐

  • Spring Boot 的 CORS 问题

    我有一个在端口 8443 上运行的 Spring Boot 应用程序 以及在端口 8080 上运行的基于 angular2 的前端 我需要我的前端向我的 Spring 服务器发出请求 但我左右都收到 CORS 错误 我已经添加了 Cross
  • linux file命令输出中的版本号字段是什么

    如果我对在 Fedora Core 11 上编译的名为 version 的可执行文件执行以下命令 我会得到以下输出 文件版本 版本 ELF 32 位 LSB 可执行文件 Intel 80386 版本 1 SYSV 动态链接 使用共享库 适用
  • 用于目录遍历的任务并行库

    我想遍历硬盘上的目录并在所有文件中搜索特定的搜索字符串 这听起来像是可以 或应该 并行完成的事情的完美候选者 因为 IO 相当慢 传统上 我会编写一个递归函数来查找并处理当前目录中的所有文件 然后递归到该目录中的所有目录 我想知道如何修改它
  • 使用 XSD 验证 XML

    我在验证 XML 时遇到了真正的困难XSD 我应该在所有这些前面加上前缀 并预先声明 我是 XSD 和验证的新手 所以我不确定这是代码问题还是 XML 问题 我经历过 XML API 的地狱 并带着无数不同的选项回来 我认为我已经找到了使用
  • 防止基类的序列化

    我觉得我应该知道这一点 但出于某种原因 序列化从 可能是抽象 基类派生的类而不必一直序列化到树上的首选方法是什么 例如 也许您无法控制派生的类 但希望使用序列化来克隆您的对象 仅克隆您的对象 而不是基础对象 例如 This is a bas
  • 如何在 bash 脚本的批处理文件的参数中包含管道字符?

    我有一个 shell 脚本 我想执行这一行 qtvars bat vsstart qt sln BUILD Debug Win32 This works fine though I had to modify qtvars bat but
  • 如何模拟低带宽、高延迟环境? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我需要模拟与服务器的低带宽 高延迟连接 以便模拟远程站点的 VPN 条件 带宽和延迟应该是可调整的 这样我就可以找到运行我们的软件包的最佳组合 For macOS there i
  • 自定义 git 命令自动完成

    我通过编写位于以下位置的 shell 脚本实现了自定义 git 命令 usr local bin 它工作正常 但我希望脚本在命令行中自动完成分支 就像git checkout TAB TAB 这怎么可能做到呢 编辑 只需添加一些上下文 gi
  • 在 Rust 中对字符串进行分区

    Rust 中是否有一种机制可以将字符串划分为等长度元素的列表 子字符串或元组 字符数组 我想要一个字符串 abcdefghijkl 并将其分成一个列表 例如 ab cd ef gh ij kl 我不需要手动查看执行此操作的方法 我只是想知道
  • python:如何从 HKLM 中删除注册表项(和子项)(出现错误 5)

    我正在尝试通过 python 脚本删除某些注册表项 我从 HKEY CURRENT USER 读取和删除键没有问题 但尝试从 HKEY LOCAL MACHINE 执行相同操作 给我带来了可怕的WindowsError 错误 5 访问被拒绝
  • 在自定义视图/uiview子类上实现iphone的复制/粘贴控件

    我承认 在 S O 上已经有一个完全符合这些思路的问题 但它缺乏实现细节 有效的答案 而且我想更具体 所以我认为应该提出一个新问题 显然 如果我错了 请告诉我 我们可以尝试重新启动那里的线程 基本上 当用户按住标签时 我想将 UILabel
  • 通过 HTTPS 使用 Web 服务时抛出 System.Net.WebException

    当使用 HTTPS 调用服务器上运行的 Web 服务时 我的应用程序抛出 System Net WebException 并显示消息 底层连接已关闭 无法与远程服务器建立信任关系 我不确定如何解决此问题并成功拨打电话 经过一番研究 我发现了
  • gcc: printf 和 long double 会导致错误的输出。 [C - 类型转换混乱]

    我对 C 相当陌生 我尝试为 Vector 编写函数 但一定有问题 这是代码 Defines maths for particles include
  • 使用ant或Eclipse编译时出现多个dex文件错误

    我无法构建我的应用程序 我正在运行今天下载的最新构建工具 这种情况在更新后开始发生 dex dex Converting compiled files and external libraries into Users rob Repos
  • 查看 Maven 工件上的 PGP 签名

    我想手动验证来自 Central 的 Maven 工件上的 PGP 签名 但我不知道从哪里开始 我在 Apache 上看到将工件上传到中央存储库的指南它说 我们要求您为所有工件提供 PGP 签名 我看到 Sonatype 的 Nexus P
  • Xamarin - 将命令绑定到用户控件内对象的属性

    几天前我开始学习 XAML 但我很难解决这个问题 在 Xamarin Forms 中 我想创建一个用户控件 其中包含一个标签和一个按钮 并且能够从使用我的用户控件的另一个页面将命令绑定到 XAML 中的用户控件 我目前遇到异常 Xamari
  • 在 ng-repeat 期间添加引导行

    我有一种情况 我有一个要在各个面板中显示的数据列表 使用 Bootstrap 的网格系统 我想利用宽屏幕并水平显示多个面板 但在窄屏幕上让它们堆叠 我目前正在使用这样的 ejs 在服务器端布局 列作为查询参数传入 通常设置为 2 或 3 因
  • Map的keySet()和entrySet()的性能考虑

    All 谁能告诉我两者之间的性能问题到底是什么 网站 代码牧场简要概述了使用 keySet 和 get 时所需的内部调用 但如果任何人都可以提供有关使用 keySet 和 get 方法时流程的准确详细信息 那就太好了 这将帮助我更好地理解性
  • 导致此异常的原因 java.lang.RuntimeException: java.lang.NoSuchMethodException: [class android.view.View]

    我的方法有问题firebase项目 我按照以下步骤操作firebaseGitHub 文档 但我遇到了这个异常 java lang RuntimeException java lang NoSuchMethodException
  • 用于 GADT 的 makeLenses (Haskell)

    是否有相当于makeLenses对于 GADT 如果我有一个简单的GADT like data D a b where D Ord a Ord b gt a gt b gt D a b 有没有办法通过传入构造函数和字段名称列表来自动生成镜头