当前位置: 首页 > 知识库问答 >
问题:

如何在不匹配Haskell的System-fw的类型系统中编程?

韦叶秋
2023-03-14

我正在研究λ-演算的最佳实现。有一个特殊的lambda项子集非常有效。它对应于具有不动点的初等仿射逻辑的类型系统。为了测试我对该算法的实现,我必须在该系统上编写适度复杂的术语。如果没有基础设施,这是很难的。我必须使用非类型化的lambda演算,然后手动添加类型;没有检查,统一,没有类型错误。

共有1个答案

陶英达
2023-03-14

最快最简单的方法可能是将系统作为EDSL嵌入到Haskell中。最后,无标记方法可能是理想的,有一个用它编码线性类型系统的例子。特别是,我建议使用Jeff Polakow的HOAS变体。这将为您提供如下语法:

*Main> :t eval $ llam $ \x -> add x (int 1)
eval $ llam $ \x -> add x (int 1) :: Int -<> Int

这并不太可怕。最后,无标记方法的一个方面是,您可以对同一个术语有多个解释,因此您可以有一个解释来将该术语转换为表示EAL的某个AST,或者如果您不能在Haskell的类型系统中捕获所有这些术语,您可以有一个解释来执行一些额外的类型检查。

 类似资料:
  • Ext JS是一个具有面向对象编程功能的JavaScript框架。 Ext是命名空间,它封装了Ext JS中的所有类。 在Ext JS中定义一个类 Ext提供了300多个类,我们可以使用它们来实现各种功能。 Ext.define()用于定义Ext JS中的类。 语法 (Syntax) Ext.define(class name, class members/properties, callback

  • 在本章中,我们将研究Grav管理面板中的Configuration System 。 您可以在“配置”页面的帮助下直接配置站点系统的设置。 此外,您将看到服务器属性的简要说明,包括PHP,服务器环境以及其他一些管理站点性能的组件。 “系统”选项卡允许您修改/user/config/system.yaml文件中的设置。 这会影响Grav操作的许多主要系统相关功能。 这些设置可以分为不同的部分,向您展

  • 实体-组件-系统模式中的一个系统为组件类提供全局范围,服务和管理。它为组件类提供公共API(方法和属性)。一个系统可以通过场景元素来访问,并能帮助组件和全局场景交互。 例如,相机(camera)系统管理所有实体的camera组件,控制哪个摄像机是活动摄像机。 注册一个系统 系统注册类似于组件。 如果系统名称与组件名匹配,则组件将具有一个对系统的引用this.system: AFRAME.regis

  • 我正在学习函数式编程的入门课程,其中我们使用Haskell。练习的一部分是为输入字符串编写解析器。 然而,我无法解决以下错误,或者得到实际发生的事情。 错误来自这一行: 我期望发生的是,输入字符串被拆分成一个行列表,并传递给parseTrack。然后,parseTrack将使用模式匹配来命名列表中最前面的两个字符串(行)和其他字符串。 然而,我认为正在发生的是finish是列表中的顶部元素,sta

  • 不幸的是,由于Liskov替换原则,Java中的子类在接受什么方法参数方面不可能比基类更有限制性,所以Java也允许一些永远不可能为真的无谓比较(并可能导致非常微妙的bug): 另一个不幸的副作用是,正如Josh Bloch很久以前在《Effective Java》中指出的那样,在存在子类型的情况下,基本不可能按照其契约正确实现方法(如果在子类中引入额外的字段,实现将违反契约的对称性和/或传递性要

  • 我在这里复制代码;https://developer.android.com/codelabs/kotlin-android-training-view-model#5 但我从DataBindingUtil中得到了一个类型不匹配。充气方法。正在返回ViewDataBinding!,当需要FragmentPlayBinding时。 我https://github.com/google-develop