gadt相关内容

如何从作用域中的约束族派生类型类实例?

编辑:我已经跟进了更多specific question。感谢这里的答题者,我认为接下来的问题更好地解释了我在这里介绍的一些念力。 tl;dr在构造函数上使用带有存在约束的GADT时,我很难在表达式中获得约束的证明。(很严重,对不起!) 我已将一个问题归纳为以下几点。我有一个简单的GADT,它表示称为X的点和称为F的函数应用程序。点X被约束为Objects。 data GADT ..

实时持久队列总数

Okasaki 描述了可以在 Haskell 中使用类型实现的持久实时队列 数据队列 a = forall x .队列{前::[a], 后方 :: [a], 时间表 :: [x]} 增量旋转保持不变 长度表 = 前长 - 后长 更多详情 如果您熟悉所涉及的队列,则可以跳过此部分. 旋转函数的样子 旋转 :: [a] ->[一]->[一]->[一个]旋转 [] (y : _) ..
发布时间:2022-01-21 11:45:26 其他开发

在 F# 中,最接近 Haskell GADT 和类型类的是什么?

F# 是一个带有 OOP 的机器学习.与 Haskell 广义代数数据类型和类型类最接近的是什么? 解决方案 答案取决于您要解决的问题.F# 没有类型类和 GADT,因此没有直接映射.但是,F# 有多种机制可用于解决通常在 Haskell 中使用 GADT 和类型类解决的问题: 如果您想表示对象结构并能够添加具有不同行为的新具体实现,那么您通常可以使用标准的 OO 和接口. 如 ..
发布时间:2022-01-05 10:20:18 其他开发

使用 Uniplate 简化 GADT

我正在尝试回答这个stackoverflow问题,使用uniplate 正如我所建议的,但是我来的唯一解决方案到目前为止很丑. 这似乎是一个相当普遍的问题,所以我想知道是否有更优雅的解决方案. 基本上,我们有一个 GADT,它解析为 Expression Int 或 Expression Bool(忽略 codataIf = If (B True) codataIf codataIf) ..
发布时间:2021-12-14 12:35:47 其他开发

奇怪的 ghc 错误消息,“我的大脑刚刚爆炸了"?

当我尝试以 proc 语法(使用 Netwire 和 Vinyl)对 GADT 进行模式匹配时: sceneRoot = proc 输入 ->做让(身份相机:& 身份儿童)= 输入返回A-) (map (rGet draw) children).纯的 我从 ghc-7.6.3 得到(相当奇怪的)编译器错误 我的脑袋刚刚爆炸我无法处理存在或 GADT 数据构造函数的模式绑定.相反,使 ..
发布时间:2021-12-14 12:05:16 其他开发

GADT的功能

这是多态数据类型的函数 的后续问题 数据类型 Question 使用 Message (问题的文本)和函数( String-> a )将用户的输入映射到问题的结果: data问题在哪里简单::(可键入a,显示a)=>留言->(字串-> a)->问题 此CLI程序应首先获取 Question 的名称,使用 getQuestion 函数查找实例,然后运行 Question 并打印出来结果. ..
发布时间:2021-05-13 20:45:56 其他开发

如何使定长向量实例化为Applicative?

我最近了解了晋升,并决定尝试编写向量. {-#语言DataKinds,GADT,KindSignatures#-}模块向量在哪里数据Nat =下一个Nat |零数据向量:: Nat->*->* 在哪里构造:: t->向量n t->向量('Next n)t空::矢量'零函子(向量n)的实例,其中fmap f a =的情况构造x b->构造(f x)(fmap f b)空->空的 到目前为止, ..
发布时间:2021-05-13 20:39:54 其他开发

如何在约束类型的约束上施加约束?

我正在使用GHC的 ConstraintKinds 扩展名.我有以下数据类型,这只是满足某些参数约束 c 的框: data Some(c :: *-> Constraint)其中一些::全部a.c a =>a->一些c 例如,我可以构造一个带有某种数字的盒子(据说不是很有用). x ::一些数字x =某(1 :: Int) 现在,只要 c 包含约束 Show ,我就可以提供 Sho ..
发布时间:2021-05-10 20:12:56 其他开发

DSL的GADT:摆动和回旋处?

有关GADT好处的典型示例表示DSL的语法;在Wiki上说此处或我可以看到,如果您具有构造正确的AST,则编写eval函数很容易. 如何将GADT处理构建为REPL?或更具体地说,是进入Read-Parse-Typecheck-Eval-Print-Loop?我看到您只是将eval步骤的复杂性推到了先前的步骤. GHCi是否在内部使用GADT表示其正在评估的表达式? (这些表达式比典型 ..
发布时间:2020-11-22 07:21:29 其他开发

F#中最接近Haskell GADT和类型类的东西是什么?

F#是具有OOP的ML.与Haskell广义代数数据类型和类型类最接近的是什么? 解决方案 答案取决于您要解决的问题. F#没有类型类和GADT,因此没有直接映射.但是,F#具有多种机制,可用于解决通常使用GADT和类型类在Haskell中解决的问题: 如果要表示对象结构并能够添加具有不同行为的新的具体实现,则通常可以使用标准的OO和接口. 如果要编写通用数字代码,则可以使用静 ..
发布时间:2020-11-02 23:04:06 其他开发

OCaml多态递归错误

给出以下类型: type _ task = | Success : 'a -> 'a task | Fail : 'a -> 'a task | Binding : (('a task -> unit) -> unit) -> 'a task | AndThen : ('a -> 'b task) * 'a task -> 'b task | OnError : ('a -> 'b task ..
发布时间:2020-05-19 19:21:24 其他开发

GADT上的模式匹配失败

我在使用ReasonML进行了更多操作,并从以下示例中发现type t上的模式匹配无法正常工作 错误:此模式与t(float)类型的值匹配,但是期望与t(int)类型的值匹配的模式float类型与int类型不兼容 type t('a) = | One: t(int) | Two: t(float); let x = fun | One => N ..
发布时间:2020-05-19 19:16:04 其他开发

ocaml中的类型级别整数

有人可以给我关于在OCaml(3.12)中制作类型级别整数以支持对其进行加减运算的建议吗? 例如,如果我有这样表示的数字: type zero type 'a succ type pos1 = zero succ type pos2 = zero succ succ ... 我需要一种在这样的类型上定义函数的方法: val add: pos2 -> pos1 -> pos3 ..
发布时间:2020-05-19 19:09:52 其他开发

在OCaml中创建GADT表达式

我的玩具GADT表情是: type _ expr = | Num : int -> int expr | Add : int expr * int expr -> int expr | Sub : int expr * int expr -> int expr | Mul : int expr * int expr -> int expr | Div : int expr ..
发布时间:2020-05-19 19:08:30 其他开发