Reflection Idris中的准液化概述
在我遇到伊德里斯之前,我还没有意识到他有一个准同性恋者 以下是REPL中的一个简短示例:Reflection Idris中的准液化概述,reflection,idris,Reflection,Idris,在我遇到伊德里斯之前,我还没有意识到他有一个准同性恋者 以下是REPL中的一个简短示例: Idris> :module Language.Reflection Idris> `(S Z) App (P (DCon 1 1) (NS (UN "S") ["Nat", "Prelude"]) (Bind (MN 0 "_t") (Pi (P (TCon 0 0) (NS (UN "Nat") ["Nat", "Prelude"]) E
Idris> :module Language.Reflection
Idris> `(S Z)
App (P (DCon 1 1)
(NS (UN "S") ["Nat", "Prelude"])
(Bind (MN 0 "_t")
(Pi (P (TCon 0 0) (NS (UN "Nat") ["Nat", "Prelude"]) Erased)
(TType (UVar "./Prelude/Nat.idr" 22)))
(P (TCon 0 0) (NS (UN "Nat") ["Nat", "Prelude"]) Erased)))
(P (DCon 0 0)
(NS (UN "Z") ["Nat", "Prelude"])
(P (TCon 0 0) (NS (UN "Nat") ["Nat", "Prelude"]) Erased)) : TT
我想知道这是怎么回事。请提供简要概述和/或参考资料 本文定义了Idris核心语言的Idris表示形式,称为TT
:
核心语言由两种不同的数据类型表示:
Raw
和TT
<代码>原始用于表示要提交的条款
对于类型检查器,而TT
表示类型检查器生成的术语
图3给出了Raw
和TT
的以下概述:
它还引用了描述准旋转机制的论文。我的实用主义观点是,离开
反射标记将帮助更多的人在寻找这个问题时找到这个问题,而不是那些它会阻碍的问题。我还被推荐为这一主题的博士论文:。
-- Variable names
data TTName = ...
-- Constants
data Const = I Int | Str String | ...
-- Binders
data Binder : (tmTy : Type) -> Type where
Lam : (ty : a) -> Binder a
Pi : (ty, kind : a) -> Binder a
Let : (ty, val : a) -> Binder a
PVar : (ty : a) -> Binder a
Hole : (ty : a) -> Binder a
Guess : (ty, val : a) -> Binder a
-- Terms which have not yet been typechecked
data Raw = Var TTName
| RBind TTName (Binder Raw) Raw
| RApp Raw Raw
| RType
| RConstant Const
-- Well typed, de Bruijn indexed terms
data TT = P NameType TTName TT
| V Int
| Bind TTName (Binder TT) TT
| App TT TT
| TConst Const
| TType TTUExp