From 094c0904470f85ff0d63c788e07ce1ecf355577e Mon Sep 17 00:00:00 2001 From: Eduardo Julian Date: Wed, 15 Nov 2017 20:35:56 -0400 Subject: - Moved type-cleaning to lux/meta/type/check. --- stdlib/source/lux/meta/type/check.lux | 38 ++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) (limited to 'stdlib') diff --git a/stdlib/source/lux/meta/type/check.lux b/stdlib/source/lux/meta/type/check.lux index 74c5a2a90..91e8f3bdf 100644 --- a/stdlib/source/lux/meta/type/check.lux +++ b/stdlib/source/lux/meta/type/check.lux @@ -17,7 +17,6 @@ (exception: #export Unknown-Type-Var) (exception: #export Unbound-Type-Var) (exception: #export Improper-Ring) -(exception: #export Cannot-Clean-Unbound-Var) (exception: #export Invalid-Type-Application) (exception: #export Cannot-Rebind-Var) (exception: #export Type-Check-Failed) @@ -628,3 +627,40 @@ (Check Type-Context) (function [context] (#e;Success [context context]))) + +(def: #export (clean inputT) + (-> Type (Check Type)) + (case inputT + (#;Primitive name paramsT+) + (do Monad + [paramsT+' (monad;map @ clean paramsT+)] + (wrap (#;Primitive name paramsT+'))) + + (^or #;Void #;Unit (#;Bound _) (#;Ex _) (#;Named _)) + (:: Monad wrap inputT) + + (^template [] + ( leftT rightT) + (do Monad + [leftT' (clean leftT) + rightT' (clean rightT)] + (wrap ( leftT' rightT')))) + ([#;Sum] [#;Product] [#;Function] [#;Apply]) + + (#;Var id) + (do Monad + [?actualT (read id)] + (case ?actualT + (#;Some actualT) + (clean actualT) + + _ + (wrap inputT))) + + (^template [] + ( envT+ unquantifiedT) + (do Monad + [envT+' (monad;map @ clean envT+)] + (wrap ( envT+' unquantifiedT)))) + ([#;UnivQ] [#;ExQ]) + )) -- cgit v1.2.3