gadt

    1热度

    1回答

    我在OCaml的手动看到这个例子使用GADT与功能应用的AST的多参数(AST)功能应用: type _ term = | Int : int -> int term | Add : (int -> int -> int) term | App : ('b -> 'a) term * 'b term -> 'a term let rec eval : type a

    11热度

    2回答

    是GADTs功能语言相当于传统的OOP +泛型,或者有一种情况下GADT容易实施正确性约束,但使用Java或C#很难或不可能实现? 例如,这种“良好类型的解释”哈斯克尔程序: data Expr a where N :: Int -> Expr Int Suc :: Expr Int -> Expr Int IsZero :: Expr Int -> Expr Boo

    13热度

    1回答

    该数据类型可以有type role HCons' representational representational,允许使用coerce添加或删除应用于元素的新类型,而不需要遍历列表。 data HNil' = HNil' data HCons' a b = HCons' a b 然而,对于这些列表的语法是不是像你一样的有以下GADT data HList (l::[*]) where

    -1热度

    1回答

    我想完成类似这样的事情,但我无法完全理解语法。 type _ s = Var : 'a -> 'a s type _ t = | AA :('a -> 'a s) -> 'c t | AB : ('a -> 'b s) -> 'c t let apply_to x = function | AA g -> g x | AB g -> g x

    13热度

    1回答

    这里就是我有一个问题的代码:要在任意多的参数定义 {-# LANGUAGE GADTs, LANGUAGE DataKinds #-} -- * Universe of Terms * -- type Id = String data Term a where Var :: Id -> Term a Lam :: Id -> Type -> Term b -> Te

    1热度

    1回答

    (使用更容易复制和粘贴评论) --Say I have the following monad: {-# LANGUAGE GADTs, FlexibleInstances #-} data Instruction b where Write :: a -> Instruction() Write2 :: (a,a) -> Instruction() Read

    9热度

    1回答

    假设我想表示具有常数c,一元函数符号f和谓词P的一阶语言的有限模型。我可以将载体表示为列表m,该常数作为m的元素,函数为有序对m元件(其可以经由一个辅助函数ap被应用)的列表,和谓词作为满足它的m的元素的列表: -- Models (m, c, f, p) with element type a type Model a = ([a], a, [(a,a)], [a]) -- helper

    3热度

    3回答

    首先,这里是我的代码最小例如: {-# LANGUAGE GADTs #-} -- package "url" import Network.URL (exportURL, URL(..), URLType(..)) data MyURL a where GalleryURL :: URL -> MyURL URL PictureURL :: URL -> MyURL

    5热度

    2回答

    我正在通过a GADT walkthrough进行阅读,并陷入其中一个练习。给定的数据结构是: {-# LANGUAGE GADTs, EmptyDataDecls, KindSignatures #-} data NotSafe data Safe data MarkedList :: * -> * -> * where Nil :: MarkedList t NotSafe

    5热度

    1回答

    这只是测试,所以我不十分关注,但我有这些定义: type z type _ s type (_, _, _) balance = | Less : (*∀'a.*) ('a, 'a s, 'a s) balance | Same : (*∀'b.*) ('b, 'b, 'b) balance | More : (*∀'a.*) ('a s, 'a, 'a s) b