From fb031d2157cfbebe359ab58db02de363b96fe909 Mon Sep 17 00:00:00 2001 From: Eduardo Julian Date: Tue, 9 May 2017 17:49:03 -0400 Subject: - Small fixes and refactorings. --- stdlib/source/lux.lux | 4 ++-- stdlib/source/lux/data/format/json.lux | 16 ++++++++-------- stdlib/source/lux/type/check.lux | 25 +++++++++++++++---------- 3 files changed, 25 insertions(+), 20 deletions(-) (limited to 'stdlib/source') diff --git a/stdlib/source/lux.lux b/stdlib/source/lux.lux index ed2d81667..bcf620c8f 100644 --- a/stdlib/source/lux.lux +++ b/stdlib/source/lux.lux @@ -5306,8 +5306,8 @@ (do Monad [expansion (macro-expand-once macro-expr)] (case (place-tokens var-name expansion (` (;with-expansions - [(~@ bindings')] - (~@ bodies)))) + [(~@ bindings')] + (~@ bodies)))) (#Some output) (wrap output) diff --git a/stdlib/source/lux/data/format/json.lux b/stdlib/source/lux/data/format/json.lux index 863c8cd3e..b75b9dbf7 100644 --- a/stdlib/source/lux/data/format/json.lux +++ b/stdlib/source/lux/data/format/json.lux @@ -787,7 +787,7 @@ (with-gensyms [g!type-fun g!case g!input g!key g!val] (do @ - [:sub: (poly;list :x:) + [:sub: (poly;apply-1 (ident-for ;List) :x:) [g!vars members] (poly;tuple :sub:) :val: (case members (^ (list :key: :val:)) @@ -821,12 +821,12 @@ ))) )) (do @ - [:sub: (poly;maybe :x:) + [:sub: (poly;apply-1 (ident-for ;Maybe) :x:) .sub. (Codec//encode *env* :sub:)] (wrap (` (: (~ (->Codec//encode (type;to-ast :x:))) (;;gen-nullable (~ .sub.)))))) (do @ - [:sub: (poly;list :x:) + [:sub: (poly;apply-1 (ident-for ;List) :x:) .sub. (Codec//encode *env* :sub:)] (wrap (` (: (~ (->Codec//encode (type;to-ast :x:))) (|>. (_map_ (~ .sub.)) vector;from-list ;;gen-array))))) @@ -942,13 +942,13 @@ (wrap (` (: (~ (->Codec//decode (type;to-ast :x:))) ( (~ .sub.))))))] - [Maybe poly;maybe ;;nullable] - [List poly;list ;;array])] + [Maybe (poly;apply-1 (ident-for ;Maybe)) ;;nullable] + [List (poly;apply-1 (ident-for ;List)) ;;array])] ($_ macro;either (with-gensyms [g!type-fun g!case g!input g!key g!val] (do @ - [:sub: (poly;list :x:) + [:sub: (poly;apply-1 (ident-for ;List) :x:) [g!vars members] (poly;tuple :sub:) :val: (case members (^ (list :key: :val:)) @@ -1046,8 +1046,8 @@ (do Monad [(~@ (List/join extraction))] ((~ (' wrap)) (~ (code;record (List/map (function [[name :slot:]] - [(code;tag name) (code;symbol ["" (product;right name)])]) - members)))))) + [(code;tag name) (code;symbol ["" (product;right name)])]) + members)))))) ))))) (with-gensyms [g!type-fun g!case g!input] (do @ diff --git a/stdlib/source/lux/type/check.lux b/stdlib/source/lux/type/check.lux index 5db2059fa..56198f5ab 100644 --- a/stdlib/source/lux/type/check.lux +++ b/stdlib/source/lux/type/check.lux @@ -381,6 +381,17 @@ (-> [Type Type] Bool Fixed Fixed) (#;Cons [ea status] fixed)) +(def: (on-var id type then else) + (All [a] + (-> Nat Type (Check a) (-> Type (Check a)) + (Check a))) + (either (do Monad + [_ (write-var id type)] + then) + (do Monad + [bound (read-var id)] + (else bound)))) + (def: #export (check' expected actual fixed) {#;doc "Type-check to ensure that the 'expected' type subsumes the 'actual' type."} (-> Type Type Fixed (Check Fixed)) @@ -409,19 +420,13 @@ (check' etype atype fixed)))) [(#;Var id) _] - (either (do Monad - [_ (write-var id actual)] - (wrap fixed)) - (do Monad - [bound (read-var id)] + (on-var id actual (Check/wrap fixed) + (function [bound] (check' bound actual fixed))) [_ (#;Var id)] - (either (do Monad - [_ (write-var id expected)] - (wrap fixed)) - (do Monad - [bound (read-var id)] + (on-var id expected (Check/wrap fixed) + (function [bound] (check' expected bound fixed))) [(#;App (#;Ex eid) eA) (#;App (#;Ex aid) aA)] -- cgit v1.2.3