类 GADT 类型变量的未来角色?

2024-05-09

A 昨天的问题 https://stackoverflow.com/q/41135212/3072788有一个定义HList(来自HList https://hackage.haskell.org/package/HList-0.4.1.0/docs/Data-HList-HList.html包)使用数据族。基本上:

data family HList (l :: [*])
data instance HList '[] = HNil
newtype instance HList (x ': xs) = HCons1 (x, HList xs)

pattern HCons x xs = HCons1 (x, xs)

而不是通常的(IMO 更优雅和直观)GADT 定义

data HList (l :: [*]) where
  HNil :: HList '[]
  HCons :: x -> HList xs -> HList (x ': xs)

这是因为数据系列版本让我们可以强制(我们只能强制HList (x ': xs)案例,因为它是一个newtype instance,但这已经足够了),而 GADT 仅推断出名义上的作用l(从而阻止任何强制)。 (我对上述问题的回答有一个具体的例子 https://stackoverflow.com/a/41135693/3072788.)

GADT 角色系统在以下方面的缺陷HList在此讨论。基本上,GHC 会自动将任何“类似 GADT”类型的变量标记为名义变量。

鉴于自那时以来已经过去了一段时间并且有人讨论让角色围绕类型/数据族变得更加灵活 https://ghc.haskell.org/trac/ghc/ticket/8177,是否有任何前进的道路(即一些现有的想法,一些开放的 Trac 票证,任何真正的东西)来检查 GADT 中更有趣的角色(例如HList)? GADT 或两者之间的相互作用是否存在一些基本限制?DataKinds和角色?需要实施/创建什么才能使其发挥作用?


角色系统的作者在这里。我不知道有什么想法可以推动我们朝这个方向前进。问题是我们需要检查一个微妙的属性以确保强制转换是安全的。具体来说,我们希望能够强制例如HList [Age, Int, String] to HList [Int, Age, String]但不HList [String, String, Int] (or an HList与三个元素以外的其他元素)。 (我假设newtype Age = MkAge Int)要实现这一点,需要一些非常光荣的类似角色的系统——能够准确描述对于这样的 GADT 来说什么强制是安全的——而且我不知道有任何创建这样一个系统的工作。

数据族方法起作用的原因是 GHC 可以看到HList [Age, Int, String]确实是一样的(Age, (Int, (String, HList '[]))),然后它就足够了解元组来完成其余的工作。

很抱歉在这里没有得到鼓励,但这似乎远远超出了我们现在所能做的。

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

类 GADT 类型变量的未来角色? 的相关文章

随机推荐

  • 从 SQLite 迁移到 Android Room 持久性库

    我有一个正在使用的应用程序SQLite数据库 我正在尝试替换AndroidSQLite with Android Room API 我已经创建了 DAO 类 实体类和 DB 但是在执行数据库查询时Async任务我收到以下错误 引起原因 ja
  • GDI+ 中绘图坐标的硬界限是什么?

    我这样渲染插值曲线 e Graphics DrawLines new Pen Color Red interpolationPoints ToArray 有时会抛出 OverflowException 对 interpolationPoin
  • Tensorflow 的 LSTM 输入

    I m trying to create an LSTM network in Tensorflow and I m lost in terminology basics I have n time series examples so X
  • Xamarin 没有安装的配置文件与安装的 iOS 签名身份匹配

    我想知道是否可以在 ios 设备上编译 Xamarin 应用程序 使用 Visual Studio for mac 而无需成为开发人员 费用为 99 美元 年 因为当我尝试在 iPhone 上构建项目时出现此错误 Xamarin iOS C
  • 如何将“全选”选项添加到 jqGrid 选择工具栏过滤器?

    我正在使用 jqGrid 和过滤器工具栏构建表格 以便用户过滤表中显示的行 如果我使用文本作为搜索类型 这一切都很好 但对于某些列 我想使用选择列表以使用户更容易根据列中的值进行过滤 我可以将列类型设置为 选择 并使用表中的值填充选项 一切
  • 单击链接时启动本地应用程序

    我正在开发一个内部 Web 应用程序 它允许我为客户存储远程控制凭据 每次我想要连接到客户计算机时 我都需要启动远程支持软件 复制并粘贴用户名和密码 然后单击 开始 按钮 该软件将具有可用的命令行参数 允许我立即启动会话 但是 我不知道如何
  • 在 m4 中,如何包含名称中包含环境变量的文件?

    我想在 m4 文本中包含一个相对于我的沙箱基目录的文件 而不使用 I switch 到目前为止 我已经弄清楚如何使用系统调用来获取环境变量 define MODEL ROOT syscmd printf MODEL ROOT dnl 接下来
  • 将子域重定向到 CakePHP 操作

    背景 我有一个 CakePHP 应用程序 位于 m 我想写一个根级别的 htaccess文件 它将重定向网站的 子域 作为操作的参数 例如 我想编写一个重写规则 这将导致像这样的重定向 http mysite myserver com ht
  • xcode9.0,在故事板中,当我将表格视图样式切换为分组时,xcode崩溃了

    在xcode9 0中 我向故事板添加了一个tableview 当我将tableview样式切换为分组时 xcode崩溃了 将新的表格视图拖到视图的顶部 删除自动行高和自动估计的默认检查 选择团体类型 OK
  • Android 蓝牙低功耗特性通知计数限制:这是否因设备而异?

    Context 我正在构建一个针对 5 0 的 Android 应用程序 它使用 BLE 连接到多个外围设备 这些外设中的每一个都有许多 10 个特性 理想情况下 我想订阅这些特征中每一项的更改通知 然而 我从阅读中了解到 Android
  • 如何使用 Handler.Post() 通知工作线程 UI 被修改?

    我有一个工作线程 偶尔我会使用以下命令向 UI 线程发送更新Handler Post 在某些情况下 我需要工作线程等待Handler Post 在 UI 线程上执行and视图被修改并且afterUI线程被修改 通知worker线程继续 这是
  • Socket.*Async 方法是线程化的吗?

    我目前正在尝试找出最小化 TCP 主服务器中使用的线程数量的最佳方法 以便最大限度地提高性能 由于我最近阅读了大量 C 5 0 的新异步功能 异步并不一定意味着多线程 这可能意味着将有限状态对象分成较小的块 然后通过交替与其他操作一起进行处
  • 使用画布矩形裁剪图像

    裁剪图像无法正常工作 我哪里错了 我的Xaml
  • 如何以编程方式检索“Program Files”文件夹的实际路径? [复制]

    这个问题在这里已经有答案了 可能的重复 C 如何在 Windows Vista 64 位上获取程序文件 x86 https stackoverflow com questions 194157 c sharp how to get prog
  • 防止 Skype 突出显示损坏文本区域

    简而言之 一个文本区域以编程方式填充了电话号码 并安装了 Skype 插件 生成突出显示标签 Thus 418 555 1234 becomes begin of the skype highlighting 418 555 1234 en
  • Visual Studio 不显示 WSL2 启动配置文件

    我刚刚将 Visual Studio 社区 2019 更新到版本 16 9 1 但我无法看到 WSL2 配置文件 如中提到的this https learn microsoft com en us visualstudio debugger
  • 通过一个表中的列更新另一表中的列

    我有两张桌子 A 和 B 两者都有一个共同的列 name 并通过列 id 相互链接 表A中的 name 列是空的 而表B中有数据 我的任务是用相应的id填充从表B到表A的该列中的所有数据 我正在使用以下查询 UPDATE A SET A n
  • Excel VBA 最终用户选择图表对象

    我想生成一些代码 允许最终用户从工作表中选择多个图表之一 之后我将根据该选择进行一系列操作 我正在寻找类似于 Application Inputbox Type 8 的东西 它允许对象选择而不是范围选择 我对不起眼的老VBA要求太多了吗 首
  • PHP/PDO/MySQL:插入 MEDIUMBLOB 会存储错误数据

    我有一个简单的 PHP Web 应用程序 它通过文件上传接受图标图像并将它们存储在 MEDIUMBLOB 列中 在我的机器 Windows 和两台 Linux 服务器上 这工作得很好 在第三台 Linux 服务器上 插入的图像已损坏 在 S
  • 类 GADT 类型变量的未来角色?

    A 昨天的问题 https stackoverflow com q 41135212 3072788有一个定义HList 来自HList https hackage haskell org package HList 0 4 1 0 doc