Idris 语言文档 Version 1.3.1where Nil : Vect Z a (::) : a -> Vect k a -> Vect (S k) a 注意我们使用了与 List 相同的构造器名。只要名字声明在不同的命名空间内 (在实践中,通常在不同 的模块内),奉 奤 奲 奩 女 就能接受像这样的特设(奡奤 夭 奨 奯奣 )名重载。 有歧义的构造器名称通常可根据上下文 来解决。 这里声明了一个类型族(奔 她 奰 奥 奆 奡奭 奩 看做拥有以下类型的 前缀函数: (!) : m a -> a 然而请注意,它并不是一个真的函数,而是一个语法!在实践中,子表达式 !expr 会在 expr 的当前作 用域内尽可能地提升,将它绑定到一个全新的名字 x, 然后用它来代替 !expr。首先表达式会按从左到 右的顺序深度优先地上升。在实践中,! 记法允许我们以更直接的方式来编程,同时该记法也标出了哪 些表达式为单子。 例如,表达式: let HasType (FS k) (u :: G) t 我们把 S t op 当做最近定义的变量有良类型的证明,而 P op n 则证明了 如果第 n 个最近定义的变量是 良类型的,那么第 n+1 个也是。在实践中, 这意味着我们通过 Var 构造器,使用 Stop 来引用最近定 义的变量, Pop Stop 来引用下一个,以此类推。 Var : HasType i G t -> Expr G t 所以,在表达式1 魔豆 | 224 页 | 2.06 MB | 2 年前3
共 1 条
- 1










