gadt相关内容
编辑:我已经跟进了更多specific question。感谢这里的答题者,我认为接下来的问题更好地解释了我在这里介绍的一些念力。 tl;dr在构造函数上使用带有存在约束的GADT时,我很难在表达式中获得约束的证明。(很严重,对不起!) 我已将一个问题归纳为以下几点。我有一个简单的GADT,它表示称为X的点和称为F的函数应用程序。点X被约束为Objects。 data GADT
..
Okasaki 描述了可以在 Haskell 中使用类型实现的持久实时队列 数据队列 a = forall x .队列{前::[a], 后方 :: [a], 时间表 :: [x]} 增量旋转保持不变 长度表 = 前长 - 后长 更多详情 如果您熟悉所涉及的队列,则可以跳过此部分. 旋转函数的样子 旋转 :: [a] ->[一]->[一]->[一个]旋转 [] (y : _)
..
F# 是一个带有 OOP 的机器学习.与 Haskell 广义代数数据类型和类型类最接近的是什么? 解决方案 答案取决于您要解决的问题.F# 没有类型类和 GADT,因此没有直接映射.但是,F# 有多种机制可用于解决通常在 Haskell 中使用 GADT 和类型类解决的问题: 如果您想表示对象结构并能够添加具有不同行为的新具体实现,那么您通常可以使用标准的 OO 和接口. 如
..
我正在尝试回答这个stackoverflow问题,使用uniplate 正如我所建议的,但是我来的唯一解决方案到目前为止很丑. 这似乎是一个相当普遍的问题,所以我想知道是否有更优雅的解决方案. 基本上,我们有一个 GADT,它解析为 Expression Int 或 Expression Bool(忽略 codataIf = If (B True) codataIf codataIf)
..
当我尝试以 proc 语法(使用 Netwire 和 Vinyl)对 GADT 进行模式匹配时: sceneRoot = proc 输入 ->做让(身份相机:& 身份儿童)= 输入返回A-) (map (rGet draw) children).纯的 我从 ghc-7.6.3 得到(相当奇怪的)编译器错误 我的脑袋刚刚爆炸我无法处理存在或 GADT 数据构造函数的模式绑定.相反,使
..
这是多态数据类型的函数 的后续问题 数据类型 Question 使用 Message (问题的文本)和函数( String-> a )将用户的输入映射到问题的结果: data问题在哪里简单::(可键入a,显示a)=>留言->(字串-> a)->问题 此CLI程序应首先获取 Question 的名称,使用 getQuestion 函数查找实例,然后运行 Question 并打印出来结果.
..
我最近了解了晋升,并决定尝试编写向量. {-#语言DataKinds,GADT,KindSignatures#-}模块向量在哪里数据Nat =下一个Nat |零数据向量:: Nat->*->* 在哪里构造:: t->向量n t->向量('Next n)t空::矢量'零函子(向量n)的实例,其中fmap f a =的情况构造x b->构造(f x)(fmap f b)空->空的 到目前为止,
..
我正在使用GHC的 ConstraintKinds 扩展名.我有以下数据类型,这只是满足某些参数约束 c 的框: data Some(c :: *-> Constraint)其中一些::全部a.c a =>a->一些c 例如,我可以构造一个带有某种数字的盒子(据说不是很有用). x ::一些数字x =某(1 :: Int) 现在,只要 c 包含约束 Show ,我就可以提供 Sho
..
我有以下定义 {-# LANGUAGE GADTs, TypeInType, RankNTypes #-} import Data.Kind class Character (a :: * -> *) where showVal :: a b -> b -> String data ExampleCharacter a where Variable :: ExampleChara
..
有关GADT好处的典型示例表示DSL的语法;在Wiki上说此处或我可以看到,如果您具有构造正确的AST,则编写eval函数很容易. 如何将GADT处理构建为REPL?或更具体地说,是进入Read-Parse-Typecheck-Eval-Print-Loop?我看到您只是将eval步骤的复杂性推到了先前的步骤. GHCi是否在内部使用GADT表示其正在评估的表达式? (这些表达式比典型
..
我正在尝试利用GADT来限制类型,但是在编译期间无法处理某些依赖项,例如用户输入.让我们考虑以下AVL树定义: data Zero data S a data AVL depth where Nil :: AVL Zero LNode :: AVL n -> Int -> AVL (S n) -> AVL (S (S n)) RNode :: AVL (S n) -> Int
..
我如何解析此文件中的输入json? https://github.com/smogon/pokemon-showdown/blob/master/data/moves.js 对于次要属性和标志属性?它们是可选的,并且包含变量类型. 一个最小的例子就是这个: [ {}, { "secondary": false }, { "secondary":
..
F#是具有OOP的ML.与Haskell广义代数数据类型和类型类最接近的是什么? 解决方案 答案取决于您要解决的问题. F#没有类型类和GADT,因此没有直接映射.但是,F#具有多种机制,可用于解决通常使用GADT和类型类在Haskell中解决的问题: 如果要表示对象结构并能够添加具有不同行为的新的具体实现,则通常可以使用标准的OO和接口. 如果要编写通用数字代码,则可以使用静
..
这是无类型的lambda演算,其项由其自由变量索引.我正在使用 singletons 库获取类型级别字符串的单例值 {-# LANGUAGE DataKinds #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-} {
..
此刻,我正在学习关于存在性量化,幻像类型和GADT的知识.如何创建带有幻像变量的数据类型的异构列表?例如: {-# LANGUAGE GADTs #-} {-# LANGUAGE ExistentialQuantification #-} data Toy a where TBool :: Bool -> Toy Bool TInt :: Int -> Toy Int ins
..
给出以下类型: 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
..
我正在OCaml中编写一个小型解释器,并使用GADT键入表达式: type _ value = | Bool : bool -> bool value | Int : int -> int value | Symbol : string -> string value | Nil : unit value | Pair : 'a value * 'b
..
我在使用ReasonML进行了更多操作,并从以下示例中发现type t上的模式匹配无法正常工作 错误:此模式与t(float)类型的值匹配,但是期望与t(int)类型的值匹配的模式float类型与int类型不兼容 type t('a) = | One: t(int) | Two: t(float); let x = fun | One => N
..
有人可以给我关于在OCaml(3.12)中制作类型级别整数以支持对其进行加减运算的建议吗? 例如,如果我有这样表示的数字: type zero type 'a succ type pos1 = zero succ type pos2 = zero succ succ ... 我需要一种在这样的类型上定义函数的方法: val add: pos2 -> pos1 -> pos3
..
我的玩具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
..