summaryrefslogtreecommitdiff
path: root/dhall/src/semantics/tck/typecheck.rs
diff options
context:
space:
mode:
authorNadrieril2020-01-30 11:53:37 +0000
committerNadrieril2020-01-30 11:53:37 +0000
commit17732b041dbd44f39ce3d04a289146db9882e865 (patch)
tree70911ccaf4c33eb662fd6b1e0b97d8b92804f28c /dhall/src/semantics/tck/typecheck.rs
parentec5fb594adf10b18a4457c3089ce4b00e2c50a39 (diff)
Encapsulate partially applied builtin in a separate struct
Diffstat (limited to 'dhall/src/semantics/tck/typecheck.rs')
-rw-r--r--dhall/src/semantics/tck/typecheck.rs26
1 files changed, 15 insertions, 11 deletions
diff --git a/dhall/src/semantics/tck/typecheck.rs b/dhall/src/semantics/tck/typecheck.rs
index 5422e6d..e1a9c11 100644
--- a/dhall/src/semantics/tck/typecheck.rs
+++ b/dhall/src/semantics/tck/typecheck.rs
@@ -6,10 +6,9 @@ use crate::error::{TypeError, TypeMessage};
use crate::semantics::phase::normalize::merge_maps;
use crate::semantics::phase::Normalized;
use crate::semantics::{
- type_of_builtin, Binder, Closure, NzVar, TyEnv, TyExpr, TyExprKind, Type,
- Value, ValueKind,
+ type_of_builtin, Binder, BuiltinClosure, Closure, NzVar, TyEnv, TyExpr,
+ TyExprKind, Type, Value, ValueKind,
};
-use crate::syntax;
use crate::syntax::{
BinOp, Builtin, Const, Expr, ExprKind, InterpolatedTextContents, Span,
};
@@ -96,8 +95,11 @@ fn type_one_layer(
ExprKind::EmptyListLit(t) => {
let t = t.normalize_nf(env.as_nzenv());
match &*t.as_whnf() {
- ValueKind::AppliedBuiltin(Builtin::List, args, _, _)
- if args.len() == 1 => {}
+ ValueKind::AppliedBuiltin(BuiltinClosure {
+ b: Builtin::List,
+ args,
+ ..
+ }) if args.len() == 1 => {}
_ => return mkerr("InvalidListType"),
};
t
@@ -365,7 +367,10 @@ fn type_one_layer(
ExprKind::BinOp(BinOp::ListAppend, l, r) => {
let l_ty = l.get_type()?;
match &*l_ty.as_whnf() {
- ValueKind::AppliedBuiltin(Builtin::List, _, _, _) => {}
+ ValueKind::AppliedBuiltin(BuiltinClosure {
+ b: Builtin::List,
+ ..
+ }) => {}
_ => return mkerr("BinOpTypeMismatch"),
}
@@ -423,12 +428,11 @@ fn type_one_layer(
let union_borrow = union_type.as_whnf();
let variants = match &*union_borrow {
ValueKind::UnionType(kts) => Cow::Borrowed(kts),
- ValueKind::AppliedBuiltin(
- syntax::Builtin::Optional,
+ ValueKind::AppliedBuiltin(BuiltinClosure {
+ b: Builtin::Optional,
args,
- _,
- _,
- ) if args.len() == 1 => {
+ ..
+ }) if args.len() == 1 => {
let ty = &args[0];
let mut kts = HashMap::new();
kts.insert("None".into(), None);