如何调试类型级程序

2024-01-02

我正在尝试进行一些类型级别的编程,但它不起作用。我正在绞尽脑汁地试图弄清楚为什么 GHC 完全无法推断出我想要的类型签名。

有什么方法可以制作GHC吗tell me它在做什么?

I tried -ddump-tc,它只打印出最终的类型签名。 (是的,他们错了。谢谢,我已经知道了。)

我也尝试过-ddump-tc-trace,它会转储出大约 70KB 难以理解的乱码。 (特别是,我看不到任何提到的用户编写的标识符anywhere.)

我的代码是so close工作,但不知何故,一个额外的类型变量不断出现。由于某种原因,GHC 无法看到该变量应该被完全确定。确实,如果我manually写下五英里类型的签名,GHC 很高兴地接受了。所以我显然只是在某个地方缺少一个约束......但是哪里?!?>_


正如评论中提到的,用 :kind 和 :kind! 来探索一下!在 GHCi 中通常是我这样做的方式,但令人惊讶的是,将函数放置在哪里也很重要,而且看起来应该是相同的,但事实并非总是如此。

例如,我试图为个人项目制作一个等价的依赖类型函子,它看起来像

class IFunctor f where 
  ifmap :: (a -> b) -> f n a -> f n b 

我正在写这个例子

data IEither a n b where 
  ILeft :: a -> IEither a Z b 
  IRight :: b -> IEither a (S n) b 

我想,这应该相当简单,只需忽略左侧情​​况下的 f ,将其应用于右侧即可。

I tried

instance IFunctor (IEither a) where
  ifmap _ l@(ILeft _) = l 
  ifmap f (IRight r) = IRight $ f r

但对于本例中 ifmap 的专门版本是ifmap :: (b -> c) -> IEither a Z b -> IEither a Z c,Haskell 推断 l 的类型为IEither a Z b在 LHS 上,这是有道理的,但后来拒绝生产b ~ c.

所以,我必须解开 l,获取类型 a 的值,然后重新包装它以获得IEither a Z c.

这不仅适用于依赖类型,也适用于 n 级类型。 例如,我试图将适当形式的同构转换为自然变换,我认为这应该相当容易。

显然,我必须将解构函数放在函数的 where 子句中,否则类型推断将无法正常工作。

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

如何调试类型级程序 的相关文章

  • 我可以使用文本编辑器(例如 Sublime Text 2)调试 Grails 应用程序吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Coq:Type(n) 中的 Prop 与 Set

    我想考虑以下三个 相关的 Coq 定义 Inductive nat1 Prop z1 nat1 s1 nat1 gt nat1 Inductive nat2 Set z2 nat2 s2 nat2 gt nat2 Inductive nat
  • 是否有 ReplayDIRECTOR / Chronon Debugger 的开源替代品?

    您可能熟悉 重播导演 http www replaysolutions com products replaydirector for java ee http www replaysolutions com products replay
  • 我可以在程序内更改堆栈大小限制吗?

    我可以通过传递配置 GHC 编译的 Haskell 程序的最大堆栈大小 RTS Kn到它 在哪里n是某个数字 有没有办法在程序内更改此设置 我想对各种函数的堆栈消耗进行基准测试 因此尝试在各种限制下运行它 捕获StackOverflow例外
  • 无法让 wxHaskell 在 Mac 上从 ghci 工作

    我正在尝试跑步一个例子 http www haskell org haskellwiki WxHaskell Quick start Hello world in wxHaskell using EnableGUI function htt
  • 在 Haskell 中使用 Maybe 类型

    我正在尝试利用 Haskell 中的 Maybe 类型 我有一个查找返回 Maybe 的键 值元组 如何访问 Maybe 包装的数据 例如 我想将 Maybe 包含的整数与另一个整数相加 或者 您可以进行模式匹配 case maybeVal
  • Java 有没有办法记录*每个*线程中断?

    我想每次都以某种方式记录Thread interrupt 被调用 记录哪个线程发出调用 及其当前堆栈 以及识别有关哪个线程被中断的信息 有没有办法做到这一点 在搜索信息时 我看到有人提到实施安全管理器的可能性 这是可以在运行时完成的事情 例
  • 如何找出正在使用哪个(版本的)函数?

    问题 如何找出正在调用的函数的版本 例如 如果我使用unique在 data frame 上 我假设我正在使用unique data frame 然而 没有unique raster函数 虽然有一个raster unique 但如果我使用
  • 类型定义:期望UnionAll,得到TypeVar

    在 v0 6 的 Julia 手册中 我发现以下内容 abstract type Pointy T end struct Point T lt Pointy T x T y T end 这工作得很好 我认为以下也应该 abstract ty
  • Android Studio断点交叉解释

    我正在 Android Studio 中使用断点调试我的 Android 项目 我注意到有时我的断点中有一个十字并且不会暂停执行 在 intellij 网站上 这被解释为 显示何时在注释或不可执行的行上设置断点 表明不会命中此类断点 谁能告
  • Objective C:在 gdb 中哪里可以找到

    我正在尝试使用 NSZombie 调试我的程序 调试器确实返回了存在问题的实例的地址 但是我不确定在哪里获取运行命令 shell malloc history 所需的 pid 谁能告诉我在这种情况下使用的正确 pid 是什么 我尝试了 32
  • 数据记录的类约束

    我有一个data type data BuildException a KillBuild JobID a Stage FailBuild JobID a Stage CancelBuild JobID a Stage StopBuild
  • 是否可以调试当前正在运行的生产节点应用程序?

    在本地我通过运行进行调试node debug并使用node inspector工具 节点检查器必须在后台运行 然后我将浏览器指向 并非所有浏览器都可以工作 Chrome 可以 http 127 0 0 1 8080 debug port 5
  • 在 IntelliJ IDEA 中编辑并继续?

    使用 IntelliJ IDEA 社区版进行调试时是否可以编辑一些代码 我在选项中找不到这个功能 是的 这就是所谓的 热插拔 您可以在调试过程中编译修改后的代码 并且类文件将被替换 直到您停止调试 确保在调试器设置中启用 HotSwap 选
  • 带边界的 haskell 列表数据类型

    我有以下类型定义来表示卡片 data Suit Hearts Spades Diamonds Clubs data Rank Numeric Integer Jack Queen King Ace data Card Card Rank S
  • 静态成员函数中的封闭类的 C++ 类型

    我认为这是完全不可能的 但如果呢 在任何版本的 C 中 是否有可能以某种方式获取静态成员函数中封闭类的类型 class Impossible public static void Fun typedef Impossible Enclosi
  • 用于启用扩展序列化调试信息的 Java 标志

    我目前正在努力解决 tomcat 上复杂对象的 HTTP 会话复制问题 一些对象实现Serializable但持有不可序列化的成员 不幸的是 默认情况下 堆栈跟踪不会提供太多有用的信息 有一个标志 XX 启用详细类名当发生 NotSeria
  • 我可以显示我在 PHP 中设置的所有 cookie 吗?

    我正在尝试诊断 cookie 中的错误 但 cookie 的名称不是应有的名称 PHP 有没有办法打印我的域设置的所有 cookie 你有没有尝试过 print r COOKIE
  • ClojureScript 中的 js/console.log

    我想用 ClojureScript 实现一个函数来简化js console log像这样 defn log args apply js console log args 调用它 log foo bar 抛出 TypeError Illega
  • Java 中更高级的泛型

    假设我有以下课程 public class FixExpr Expr

随机推荐

  • Soundcloud API SC.stream(曲目未加载)

    我从 soundcloud API 流式传输音乐 有时当我调用 SC stream 时 曲目不会流式传输 并且出现错误 GET http api soundcloud com tracks 80608808 stream client id
  • PHP 使用 POST 数据重定向

    我对这个话题做了一些研究 有一些专家说这不是possible https stackoverflow com questions 3045097 php redirect and send data via post 所以我想寻求替代解决方
  • 带参数启动程序

    如何编写一个非常简单的程序 使用命令行导航到用户的 Program Files 目录中的程序 然后启动 exe带参数 例如 C etc Program Files ProgramFolder Program exe C etc deskto
  • junit 的 Ant 目标

    我有 Suite java 文件 public class EshopServiceTestSuite extends TestSuite public static Test suite TestSuite suite new TestS
  • 使用 dask read_parquet 方法进行过滤会产生不需要的结果

    我正在尝试使用读取镶木地板文件dask read parquet方法和filters夸格 但有时它不会根据给定条件进行过滤 例子 创建并保存数据框dates column import pandas as pd import numpy a
  • Node.js 并发

    我是 Node js 的新手 我正在测试 socket io 的实时消息传递 我喜欢它并且想使用它 我有个问题 Node js 服务器可以运行多少并发 我们的程序大概会有100个并发 所以 我对此很担心 我发现了另一个实时消息服务器 APE
  • 从 Spring Web MVC 控制器返回带有查询参数的视图字符串?

    这是我想要的效果 但我无法弄清楚语法 RequestMapping method RequestMethod GET params param1 param2 produces text html public String createF
  • 错误 1111 (HY000):组功能使用无效

    给定一个具有以下属性的人员表 ec 姓名 代码 出生日期 工资 列出收入高于平均工资的员工 我的解决方案 select from staff where salary gt avg salary 这有什么问题吗 聚合可能不会出现在WHERE
  • 我可以从正则表达式创建列表吗?

    我正在制作一个爬虫 用户可以指定正则表达式字符串来下载数据 当用户输入表单为 http xxx abc x z image 9 10 11 png 我想下载这些 http xxx abcx image9 png http xxx abcy
  • CocoaPods 安装/搜索 pod 时出错

    我正在尝试在我的项目中使用一些 Pod 但终端结果是 pod install Analyzing dependencies Unable to find a specification for Mantle 因此 我尝试搜索该 Pod 或其
  • React Native:未找到哈希字符串“android-28”的目标

    当尝试从命令行构建 React Native android 应用程序时 我遇到了以下问题 它位于 Ubuntu Server 上 因此没有 Android Studio GUI 我有android 28安装在错误指出的文件夹中 ANDRO
  • 未初始化的常量 Active Scaffold Rails 2.3.5

    我将 Rails 应用程序从 2 0 2 更新到 2 3 5 我使用主动支架作为管理部分 我没有更改代码 但更新出现了问题 我有一个控制器 admin user controller 来管理用户 这是控制器的代码 class Admin U
  • XML 文件的长度

    我有一个大小为 31 GB 的 XML 文件 我需要找到该文件中的总行数 我知道命令wc l会给我同样的 但是执行此操作花费的时间太长 有没有更快的机制来查找大文件中的行数 31 gigs 是一个非常大的文本文件 我打赌它会压缩到大约 1
  • 输入数字字段时移动浏览器上“输入/下一个”键的行为

    我这里有一行代码 不涉及表单
  • 如何在 OpenOffice 中进行简单的邮件合并

    我需要使用 C VBScript VB Net 或 C 通过 OLE 或本机 API 在 OpenOffice 中进行简单的邮件合并 有什么好的例子吗 我还没有想出一个令我非常满意的解决方案 但这里有一些注意事项 问 什么是用于邮件合并的
  • 将列表转换为 Pandas Dataframe 列

    我需要将列表转换为单列 pandas 数据框 当前列表 len 3 Thanks You Its fine no problem Are you sure 所需的 Pandas DF 形状 3 0 Thank You 1 Its fine
  • statsmodels ARIMA 结果与原始数据的比较

    我有一个包含季节性成分的时间序列 我安装了 statsmodels ARIMA model tsa arima model ARIMA data 8 1 0 fit 例如 现在 我了解到 ARIMA 与我的数据存在差异 我如何比较结果 pr
  • 从 git 命令获取 JSON,例如 git status

    如果我运行这个命令 git status I get On branch master Your branch is up to date with origin master nothing to commit working direc
  • WPF绑定以更改椭圆的填充颜色

    如何以编程方式更改 XAML 中基于变量定义的椭圆的颜色 我读到的关于绑定的所有内容都是基于集合和列表 我不能根据字符串变量的值简单地 字面意思 设置它吗 字符串颜色 红色 颜色 FF0000 值得指出的是 其他帖子引用的转换器已经存在 这
  • 如何调试类型级程序

    我正在尝试进行一些类型级别的编程 但它不起作用 我正在绞尽脑汁地试图弄清楚为什么 GHC 完全无法推断出我想要的类型签名 有什么方法可以制作GHC吗tell me它在做什么 I tried ddump tc 它只打印出最终的类型签名 是的