gadt

    1热度

    2回答

    我有一个从单继续练习我的Haskell的主题,我一直在考虑以下几点: data Expr = Con Value | And Expr Expr data Value = IntValue Int | BoolValue Bool est :: Expr -> Val est (Con v) = v est (And x y) = case (es

    8热度

    1回答

    我正在阅读GADT介绍here,它发现限制程序员只创建正确类型的语法树的想法很好,我把这个想法放入我的简单lambda演算解释器中,但后来我意识到我无法解析字符串到这个语法树,因为一个解析函数需要根据输入返回不同类型的语法树。这里有一个例子: {-# LANGUAGE GADTs #-} data Ident data Lambda data Application data Expr

    1热度

    2回答

    我想编写一个Haskell程序,它在GHCi(即mipsel上的GNU/Linux)不支持的平台上交互使用GADT。问题是,可用于在GHC定义GADT,例如结构: data Term a where Lit :: Int -> Term Int Pair :: Term a -> Term b -> Term (a,b) ... 似乎并不在拥抱的工作。 在Hugs

    4热度

    1回答

    我想用可组合逻辑创建复杂的数据结构。也就是说,数据结构具有通用格式(实质上是一些记录,其中某些字段的类型可以更改)以及一些通用函数。具体结构具有通用功能的具体实现。 我尝试了两种方法。一种是使用类型系统(具有类型类型,类型族,函数依赖关系等)。另一个是创建我自己的“vtable”并使用GADT。两种方法都以类似的方式失败 - 似乎有一些基本的东西我在这里失踪。或者,也许有更好的Haskell方法来

    2热度

    2回答

    data Foo = Bar1 | Bar2 Foo Foo | Bar3 Foo | Bar4 Foo Foo Foo 现在,假设有人构建了Foo树,我想检查Foo值的参数是否有效。在构造函数参数的规则是: Bar2 Bar1 Foo Bar3 (Bar2|Bar3|Bar4) Bar4 Bar1 Bar1 (Bar1|Bar4) 我知道价值的构造,只要检

    14热度

    1回答

    我发现我真的很喜欢将GADT与Data Kinds结合使用,因为它为我提供了比以前更多的类型安全性(对于大多数用途,几乎和Coq,Agda等一样好)。可悲的是,模式匹配在最简单的例子上失败了,除了类型类之外,我想不出写函数的方法。 这里的解释我的悲伤的例子: data Nat = Z | S Nat deriving Eq data Le :: Nat -> Nat -> * where

    7热度

    1回答

    有时我需要返回存在量化类型的值。当我使用幻像类型(例如表示平衡树的深度)时,这种情况经常发生。 AFAIK GHC没有任何种类的exists量词。它只允许existentially quantified data types(直接或使用GADT)。 举个例子,我想有功能类似这样: 到目前为止,我有两个可能的解决方案,我将添加一个答案,我会很高兴地知道如果有人知道更好或不同的东西。

    4热度

    1回答

    我想representat MOD-N计数器作为间隔[0, ..., n-1]的切分为两个部分: data Counter : ℕ → Set where cut : (i j : ℕ) → Counter (suc (i + j)) 利用这一点,定义了两个关键的操作是直接的(一些样张省略为了简洁): _+1 : ∀ {n} → Counter n → Counter n cut

    20热度

    2回答

    在Type-Safe Observable Sharing in Haskell Andy Gill展示了如何在DSL中恢复Haskell级别上存在的共享。他的解决方案在data-reify package中实施。此方法是否可以修改为与GADT一起使用?例如,鉴于此GADT: data Ast e where IntLit :: Int -> Ast Int Add :: As

    5热度

    1回答

    我试图用异质平等,以证明涉及此索引的数据类型声明: data Counter : ℕ → Set where cut : (i j : ℕ) → Counter (suc i + j) 我能够使用Relation.Binary.HeterogenousEquality.≅推理给我写的证明,但只通过假定下面的一致性属性: Counter-cong : ∀ {n n′} {k : Cou