使用 GHC.Generics 恢复类型定义

2024-06-23

昨天我尝试回答这个问题是关于数据类型的表示。 https://stackoverflow.com/questions/22715572/a-serializable-representation-of-a-data-type-for-client-server-conformity-checki使用 GHC.Generics。我可以恢复给定示例问题的类型定义,例如:

data Artist = Artist Text Genre
data Genre = Jazz | Metal

与导出的Generic实例,默认实例Modelable(可以恢复其类型定义的事物的类),以及Modelable实例为Text

deriving instance Generic Artist
instance Modelable Artist

deriving instance Generic Genre 
instance Modelable Genre

我们可以确定undefined :: Artist具有以下类型Main.Artist鉴于前面的类型声明:

data Main.Artist :: *
        Artist Data.Text.Text Main.Genre
data Main.Genre :: *
        Jazz
        Metal

Main.Artist

我用声明表示类型,以便我们还可以攻击递归数据结构,例如

data ExampleTree = Branch Int ExampleTree ExampleTree | Leaf

我们可以确定的是

data Main.ExampleTree :: *
        Branch GHC.Int.Int Main.ExampleTree Main.ExampleTree
        Leaf

Main.ExampleTree

到目前为止,我的代码涵盖了所有这些情况:

https://gist.github.com/Cedev/9857191 https://gist.github.com/Cedev/9857191

我们可以恢复类型应用程序中的类型吗?

例如,现在我无法区分应用于两种不同类型的类型之间的区别[Track] and String ~ [Char]。来自Datatype实例为D在这种情况下我只能恢复外部类型GHC.Types.[],我什至无法区分这两种类型。

data Album = Album Artist [Track]
data Track = Track Int String

对于该类型,以下是可接受的输出Album,但效率很低:

data GHC.Types.[] GHC.Char.Char :: *
        []
        : GHC.Char.Char GHC.Types.[]
data GHC.Types.[] Main.Track :: *
        []
        : Main.Track GHC.Types.[]
data Main.Album :: *
        Album Main.Artist (GHC.Types.[] Main.Track)
data Main.Artist :: *
        Artist Data.Text.Text Main.Genre
data Main.Genre :: *
        Jazz
        Metal
data Main.Track :: *
        Track GHC.Int.Int (GHC.Types.[] GHC.Char.Char)

Main.Album

因为我无法区分两者之间的区别[Track] and String,我能得到的最接近的是这样的,它假设所有[]s 包含Track因为这是首先遇到的情况:

data GHC.Types.[] :: *
        []
        : Main.Track GHC.Types.[]
data Main.Album :: *
        Album Main.Artist GHC.Types.[]
data Main.Artist :: *
        Artist Data.Text.Text Main.Genre
data Main.Genre :: *
        Jazz
        Metal
data Main.Track :: *
        Track GHC.Int.Int GHC.Types.[]

Main.Album

我们可以恢复声明中的类型变量吗?

更好的表示将共享以下定义[]。这需要发现[]有善良* -> *并且其第一个参数的类型:构造函数来自类型参数[].

data GHC.Types.[] :: * -> *
        []
        : (Var 0) GHC.Types.[]
data Main.Album :: *
        Album Main.Artist (GHC.Types.[] Main.Track)
data Main.Artist :: *
        Artist Data.Text.Text Main.Genre
data Main.Genre :: *
        Jazz
        Metal
data Main.Track :: *
        Track GHC.Int.Int (GHC.Types.[] GHC.Char.Char)

Main.Album

我们可以恢复除以下类型之外的事物的类型定义吗* and * -> * ?

是否有可能恢复具有更多参数的事物的定义?

data ThreeTuple a b c = ThreeTuple a b c

例如应该是哪个

data Module.ThreeTuple :: * -> * -> * -> *
        ThreeTuple (Var 0) (Var 1) (Var 2)

是否有可能恢复高阶类型事物的定义?

data Position f = {
    positionName :: f String
}

data Employee f = {
    employeeName :: f String,
    employeePosition :: f (Position f)
}

哪一个会是

data Module.Position :: (* -> *) -> *
    Position {
        positionName :: (Var 0) (GHC.Types.[] GHC.Char.Char)
    }

data Module.Employee :: (* -> *) -> *
    Employee {
        employeeName :: (Var 0) (GHC.Types.[] GHC.Char.Char),
        employeePosition :: (Var 0) (Module.Position (Var 0))
    }

None

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

使用 GHC.Generics 恢复类型定义 的相关文章

  • 类型级编程有哪些示例? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我不明白 类型级编程 是什么意思 也无法使用Google找到合适的解释 有人可以提供一个演示类型级编程的示例吗 范式的解释和 或定义将
  • Haskell cabal:我刚刚安装了软件包,但现在找不到软件包

    在这里 http haskell org haskellwiki Cabal Install I just installed packages 2C but now the packages are not found这是我可以找到我正在
  • 为什么我不能将 Int 类型与 a 类型匹配

    哈斯克尔新手在这里 我在这里尝试做的事情的一个过于简单的例子 test Int gt a test i i Couldn t match expected type a with actual type Int a is a rigid t
  • Repa 数组上的并行 mapM

    在我最近的work https github com bgamari mixture model with Gibbs sampling 我一直在充分利用RVar http hackage haskell org packages arch
  • `arr fst` 是如何自然变换的?

    I asked 这个问题 https stackoverflow com q 62733726 11143763不久以前 这是关于以下箭头定律 arr fst first f f arr fst Category k gt k b c gt
  • 加快 GHC 中的编译速度

    除了 O0 这可以加快编译时间吗 如果生成的程序未被优化也没关系 实际上我只想经常快速地对大型 haskell 包进行类型检查 Flag fno code极大地加快了编译速度 但无法使用它 因为该程序使用了 TemplateHaskell
  • 在类型级别未定义

    通常 当我使用 Haskell 代码时 我会使用类型注释将内容存根并undefined foo String gt Int foo undefined 是否有类型级别的 未定义 我可以以类似的方式使用 理想情况下 与某种注释结合使用 typ
  • Haskell Stack 包安装错误

    user stack install dictionaries Error While constructing the build plan the following exceptions were encountered In the
  • 使用 GHC.Generics 恢复类型定义

    昨天我尝试回答这个问题是关于数据类型的表示 https stackoverflow com questions 22715572 a serializable representation of a data type for client
  • 不明确的类型变量

    相关我之前关于遍历数据结构的问题 https stackoverflow com questions 1855371 avoiding boilerplate when dealing with many unrelated types 当
  • 为什么在 haskell 中不带括号不可能进行负数相乘

    乘法5 3在 haskell gchi 中给了我一个错误 但乘以5 3 工作正常 为什么需要括号 ghci GHCi version 7 4 1 http www haskell org ghc for help Loading packa
  • Haskell - 让函数返回空字符

    我正在尝试创建一个函数来删除字符串中的每个第 n 个元素 dropEvery String gt Int gt String dropEvery str n map char indx gt if indx mod n 0 then cha
  • 为什么阴谋集团重新安装“总是危险的”?

    使用 Cabal 重新安装软件包时 通常会看到以下警告 警告 请注意 重新安装总是很危险的 无论如何继续 此消息背后的一些原因是什么 目前 重新安装软件包意味着破坏性地覆盖已安装的软件包 如果旧包对系统有任何反向依赖性 它们将不再工作 为了
  • 如何编写将布尔值返回到一个函数的函数

    我在这里发现了一个类似的问题 它问了几乎相同的问题 但又不完全一样 我的问题是如何将 a gt Bool 类型的函数列表组合成一个也是 a gt Bool 的函数 Ex compose a gt Bool gt a gt Bool comp
  • 带边界的 haskell 列表数据类型

    我有以下类型定义来表示卡片 data Suit Hearts Spades Diamonds Clubs data Rank Numeric Integer Jack Queen King Ace data Card Card Rank S
  • Haskell 程序查找列表中元素的位置

    我需要编写一个函数来查找列表中一个特定元素的位置 我是这样写的 findPos list elt list 1 head list elt 0 otherwise 1 findPos tail list elt 但是如果列表中元素重复怎么办
  • 我必须实现 Applicative 和 Functor 来实现 Monad

    我正在尝试实现一个 Monad 实例 作为一个更简单的示例 假设如下 data Maybee a Notheeng Juust a instance Monad Maybee where return x Juust x Notheeng
  • 当您包含导入 Gloss 的项目时,“stack ghci”会失败

    如果您在 Stack 项目中导入 Gloss 并使用stack ghci 您会收到以下错误 GHCi version 7 10 2 http www haskell org ghc for help
  • 使用 Haskell 识别段落中的单词数

    我是 Haskell 和函数式编程的新手 我有一个 txt包含一些段落的文件 我想使用 Haskell 计算每个段落中的单词数 我已经写了输入 输出代码 paragraph words String gt int no of words I
  • Haskell:打印文本编码

    Haskell 新手在这里 ghc version The Glorious Glasgow Haskell Compilation System version 6 12 1 在尝试调试第三方 Haskell 程序中与区域设置相关的奇怪错

随机推荐

  • 下拉字段 - 第一项应为空

    在查找列中使用共享点构建并将其设置为必填字段 SharePoint 自动选择下拉框中的第一项 对最终用户来说有点误导 有没有办法让这个下拉框的第一行显示空白或空 我对任何解决方案持开放态度 我更喜欢 javascript 类型的解决方案 对
  • 如何使用 API 访问 Google 搜索“手气不错”功能?

    我正在创建一个示例应用程序 它将接受用户的查询 并返回从 Google 的 手气不错 搜索返回的 URL 结果 Google 是否通过其 API 公开此功能 如何访问这个 谷歌似乎改变了他们的I m feeling lucky url 解决
  • SQL数据库数据排序

    我能够获取名字和姓氏的组合长度以及按 ID 排序 但我无法按字典顺序对其进行排序 SELECT CUSTOMER ID CUSTOMER FIRST NAME CUSTOMER LAST NAME FROM CUSTOMER WHERE L
  • 递归指数法

    public static int exponent int baseNum int temp baseNum baseNum return temp exponent baseNum 现在 如果我调试它 上面的方法会 n n 变成无穷大
  • 为什么 Spring Boot Web 应用程序启动后立即关闭?

    使用STS 如果我导入 Rest Service 使用最新的 Spring Boot 开始项目并选择 Run As Spring Boot App 它启动 然后立即关闭 查看调试日志 Spring 由于某种原因决定该项目不是 Web 应用程
  • 将 lptstr 转换为 char*

    有人知道如何转换类型吗LPTSTR to char in C 取决于它是否显示为 Unicode 如果不是 Unicode LPTSTR 是 char 如果是 则 LPTSTR 是 w char 这里讨论得更好 http social ms
  • 在网格视图中动态添加网格项

    如何在网格视图中动态添加网格项 目前 我有一个包含我的图像的适配器 我想从 URL 获取图像并将它们动态添加到我的网格视图中 为网格视图创建自定义适配器 并为网格视图设置自定义适配器 这是网格项的 xml 代码
  • 无法从操作触发事件

    我正在设置 Spring 状态机事务 我想在 Event1 完成后启动 Event2 这些是我所拥有的状态 状态 gt 初始 第二 第三 我已将事务配置为从 FIRST EVENT 的操作发送 SECOND EVENT 如下所示 trans
  • 在 Highcharts 中对堆叠条形图进行分组

    我遇到的情况是 我需要将某些条形 列分组为逻辑分组以满足业务需求 我不在乎它是堆积条还是堆积柱 但我需要将某些堆栈分组在一起 各个堆栈仍然需要标记 Highcharts 是我当前的目标 但如果无法实现 我将考虑另一个库的想法 我对通过 pl
  • 在 Visual Studio Code 终端中打开 CMD

    每当我在 Visual Studio Code 中打开终端时 我都会得到一个 bash shell 我想添加 CMD 作为第二个 shell 为此 我浏览了 VS Code 文档并找到了以下命令 CTRL SHIFT 但它只打开第二个 ba
  • 如何在GDB中访问std::tr1::shared_ptr的目标

    如何访问 GDB 中 std tr1 shared ptr 的目标 这不起作用 gdb p sharedPtr gt variableOfTarget 如果我尝试使用指针对象本身 p sharedPtr 我得到这样的东西 1 std tr1
  • 模型视图演示者 - 被动视图 - 谁加载模型?

    我很好奇使用 MVP 模式来提高可测试性 我有 MVC 经验 但 MVP 似乎有所不同 我有一个在 项目 文件上运行的应用程序 该文件实际上是多个文件和文件夹的压缩存档 这个项目应该是我的模型 我将把加载模型的代码放在哪里 我还在考虑另一个
  • Linux内核如何阻止BIOS系统调用?

    BIOS 调用在 Linux 操作系统中不可用 我想知道内核如何阻止执行包含对 BIOS 子例程的调用的指令 The BIOS http en wikipedia org wiki Basic Input Output System主要在
  • 如何通过传递命名函数为 unordered_set 显式指定自定义哈希函数?

    根据已接受的答案这个问题 https stackoverflow com questions 8157937 how to specialize stdhashkeyoperator for user defined type in uno
  • 如何使用 dart json_serialized 包序列化 GeoPoint

    我正在尝试使用以下包按距离过滤我的 Firestore 集合 https github com fluttercommunity firestore helpers https github com fluttercommunity fir
  • 如何使用反射将新项目添加到集合中

    我试图使用反射将未知对象添加到未知集合类型中 当我实际执行 添加 时 我遇到了异常 我想知道是否有人可以指出我做错了什么或有替代方案 我的基本方法是迭代通过反射检索的 IEnumerable 然后将新项目添加到辅助集合中 稍后我可以将其用作
  • 定义颜色属性的多个类的优先级按声明顺序而不是规范顺序设置

    给定定义颜色属性的两个具有相同特异性的类 我认为元素类属性中列出的最后一个类将优先 From http htmlhelp com reference css struct html http htmlhelp com reference c
  • 如何导入位于pycharm项目中同一子目录中的python文件

    我在pycharm中调试和运行时出现输入错误 我的项目结构已正确扎根 etc HW3 以便HW3是根目录 我在 HW3 中有一个子文件夹 util 和一个文件 util util py 我还有另一个文件util called run tes
  • 自定义警报对话框 android

    我正在 android 中使用自定义警报对话框 我已遵循link 1 https stackoverflow com questions 9467026 change dialog position on the screen and li
  • 使用 GHC.Generics 恢复类型定义

    昨天我尝试回答这个问题是关于数据类型的表示 https stackoverflow com questions 22715572 a serializable representation of a data type for client