问题标签 [gadt]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - 为 GADT 定义您自己的 Typeable 实例
有人可以指出一组很好的示例,用于在 Haskell 中为 GADT 定义 Typeable 或 Typeable1 实例。
或者,有人可以向我展示如何为以下 GADT 定义 Typeable(手动)。
或者,指向介绍该想法的论文的指针也会有所帮助。
types - ocaml 中的类型级别整数
谁能给我关于在 OCaml (3.12) 中制作类型级整数的建议/建议,以支持对它们进行加法和减法运算?
例如,如果我有这样表示的数字:
我需要一种方法来定义这样的类型的函数:
小背景:我正在尝试为物理维度上的操作移植一些haskell 代码,并且我需要能够定义维度类型上的操作(7 个类型级别整数的记录,代表 7 个基本 SI 单位的指数)。我需要这样做以避免动态绑定(使用对象时)并使编译器能够静态评估和检查所有此类表达式。
我目前的理解是,我应该制作一个将操作实现为类型构造函数的 GADT,但我仍然在为这个想法苦苦挣扎,任何提示都将不胜感激。
haskell - 使用参数化类型 Haskell 的模糊类型
我有一个非常简单的函数,它采用参数化数据类型并返回相同的类型:
这个想法是 normalize 将采用任何大小的列表的 PolyRing,然后返回一个具有长度为 n 的填充/修改系数向量的新 PolyRing,其中 n 是传入的 PolyRing 类型的一部分。
我收到错误:
我已经查看了有关此错误的所有其他 SO 帖子,但仍然一无所获。即使我删除了对“len”的所有引用(但将其保留在 where 子句中),也会发生错误,所以问题出在
这与我在其他地方使用 IntegerAsType 的方式几乎相同。
在您使用它的同时,我也在为我现在使用的参数化类型系统的替代方案提供建议。特别是,这很痛苦,因为我必须为许多不同的值定义 IntegerAsType。我们使用类型而不是参数来确保,例如,您不能添加不同多项式环的两个元素(参数“a”确保您不能添加多项式环模相同的多项式但在不同的基础环)。
谢谢
haskell - 在异常处理中使用 GADT
这是我的问题
我正在使用 Control.Exception.catch 进行异常处理,它具有以下类型:(从 Hoogle 中剔除)
这是我将传递给我的处理函数的构造函数
这是现在的 Handler 函数:
我将用它来做一些日志记录。我需要记录的信息将在 JobState 类型的记录中
因此,由于我需要一个强制具有我上面提到的类型的处理程序,并且我需要一个 JobState,我认为答案是重写 JobException 以在其中隐藏一个 JobState。这似乎是 GADT 的工作!我不确定,这是新领域。
我对吗?我可以用 GADT 解决这个问题吗?有人可以提供如何开始构建的线索吗?我一直在阅读的教程假设您正在尝试解决比我所得到的更复杂的问题。
如果我错了,有人可以指出我正确的方向吗?
更新:我从1中了解了动态类型,并在此后不久发现了 Data.Dynamic。逐渐回暖?
haskell - 我可以静态拒绝存在类型的不同实例吗?
第一次尝试
很难使这个问题简洁,但提供一个最小的例子,假设我有这种类型:
这种类型让我很高兴地构建了以下异构列表:
但是,唉,当我写下一个Eq
实例时,事情就出错了:
啊,所以我们Could not deduce (a1 ~ a)
。非常正确; 定义中没有任何内容说x
并且y
必须是相同的类型。事实上,重点是允许它们不同的可能性。
第二次尝试
让我们Data.Typeable
混合起来,如果它们恰好是相同的类型,则只尝试比较两者:
这很不错。如果x
和y
是相同类型,则使用底层Eq
实例。如果它们不同,它只会返回False
. 但是,此检查会延迟到运行时,从而nonsense = Val2 True == Val2 "Hello"
可以毫无怨言地进行类型检查。
问题
我意识到我在这里与依赖类型调情,但是 Haskell 类型系统是否有可能静态拒绝类似上述内容nonsense
,同时允许类似在运行时sensible = Val2 True == Val2 False
交回的内容False
?
我处理这个问题的次数越多,我就越需要采用HList的一些技术来实现我需要作为类型级函数的操作。但是,我对使用存在主义和 GADT 比较陌生,我很想知道是否可以找到解决方案。所以,如果答案是否定的,我非常感谢讨论这个问题究竟在哪里达到了这些功能的限制,以及推动适当的技术、HList 或其他方式。
generics - 抬高的脊椎视图
我试图遵循论文“废弃你的样板”革命的程序。不幸的是,我发现提升脊椎视图部分中的程序无法在我的 GHC 中编译,有人能指出我错在哪里吗?
haskell - 在 Haskell 中 data ... where 是什么意思?
我在omegagb 的开发日志中看到了这个片段:
是什么data ... where
意思?我以为关键字data
是用来定义新类型的。
generics - 类型构造函数的 Scala 类型推断
我有一个关于 Scala 类型构造函数的类型推断的问题。我正在运行 Scala 2.9.1 ...
假设我定义了树:
并根据我的树定义定义了一个 BinaryTree:
我现在可以这样定义整数的 BinaryTree:
这样做的问题是我必须在实例化时提供类型参数Node
。
所以如果这样做:
我得到错误:
有什么办法可以强制类型检查器,这样我就不必明确提供的类型Node
?
谢谢!
在迪迪埃德的评论之后修订
如果我理解正确,声明
在我原来的问题中不起作用,因为这个 Pair 声明只是 Tuple2 类型构造函数(需要两个类型参数)的语法糖。这会导致类型推断器失败。
如果我声明我自己的 Pair 类(正如 didierd 在他的回答中所建议的那样),我成功地让 Tree 正常工作。
然后我可以这样做...
我知道 didierd 顺便提到了这个解决方案,但这似乎是我想要的方式。请让我知道你在想什么!
java - Java中的参数化类型(GADT)
我需要在 Java 中有这样的 GADT,比如
所以我可以轻松地声明类
然后将其与接受 Selector 实例的 Action 的实现一起使用。并且具有接受 Predicate 的 Action 的实现 - 但参数的类型必须与集合的返回类型匹配。
主要思想是让一种类型依赖于另一种类型。这在普通的旧 Java 6 中可能吗?
haskell - 多态列表的 GADT
我正在解析表格的一些陈述
我正在使用 State Monad,我的状态应该是一对 (String, Expr a),我真的坚持要输入表达式。我试图将状态实现为 [PPair],我在 GADT 中定义了 PPair:
一旦这一行通过编译器,我就觉得我做错了什么。我抑制住了这个想法,继续编码。当我开始编写从 State 中提取变量值的代码时,我意识到了问题所在:
我得到:
这是意料之中的。我该如何解决这个问题?我知道我可以通过将类型分解为所有候选类型 a 来解决它,但是没有更简洁的方法吗?