尝试在具有类型级别列表的GADT上基于 定义模式同义词时出现错误。 我设法熬下来到这个例子: {-# LANGUAGE GADTs #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE PatternSynonyms #-}
mo
我想要做一些高级的类型级编程;这个例子是我的原始程序的简化版本。 我有(Haskell)类型的表示形式。在这个例子中,我只涉及函数类型,基本类型和类型变量。 表示Type t由一个类型变量t参数化,以允许区分类型级别。为了达到这个目标,我主要使用GADT。不同的类型和类型变量通过使用类型级文字来区分,因此KnownSymbol约束和使用Proxy s。 {-# LANGUAGE GADTs, Ty
是否可以指定数据库的每个成员满足类型类型,从而隐含类约束?例如。 data AB = A | B
class Foo (a :: AB) where get :: proxy a -> String
instance Foo A where get _ = "A"
instance Foo B where get _ = "B"
-- note lack of constraint he
我试图使用DataKinds来做类型级别的编程,但当我有嵌套在另一个这些结构之一时遇到困难。 {-# LANGUAGE DataKinds, TypeFamilies, GADTs, MultiParamTypeClasses, FlexibleInstances #-}
module Temp where
data Prop1 = D | E
data Lower :: Prop1
我一直在努力在Haskell中构建我自己的Diplomacy模拟器来让我的脚湿润。 我相信我已经拿出一个像样的定义的顺序是什么: data Order = Hold Unit Territory
| Move Unit Territory Territory
| Support Unit Territory Unit Territory Territory
DataKinds扩展将“值”(即构造函数)提升为类型。例如True和False成为不同类型的种类Bool。 我想要做的是相反的,即降低数值类型。与此签名的函数就可以了: demote :: Proxy (a :: t) -> t
其实我可以做到这一点,例如用于Bool: class DemoteBool (a :: Bool) where
demoteBool :: Proxy (