aboutsummaryrefslogtreecommitdiff
path: root/new-luxc/source/luxc/lang/analysis/function.lux
diff options
context:
space:
mode:
Diffstat (limited to 'new-luxc/source/luxc/lang/analysis/function.lux')
-rw-r--r--new-luxc/source/luxc/lang/analysis/function.lux19
1 files changed, 8 insertions, 11 deletions
diff --git a/new-luxc/source/luxc/lang/analysis/function.lux b/new-luxc/source/luxc/lang/analysis/function.lux
index 0bb46aba1..2a9826683 100644
--- a/new-luxc/source/luxc/lang/analysis/function.lux
+++ b/new-luxc/source/luxc/lang/analysis/function.lux
@@ -39,17 +39,14 @@
#;None
(&;throw Invalid-Function-Type (%type expectedT)))
-
- (#;UnivQ _)
- (do @
- [[var-id var] (&;with-type-env
- tc;existential)]
- (recur (maybe;assume (type;apply (list var) expectedT))))
- (#;ExQ _)
- (do @
- [[var-id var] (&;with-type-env tc;var)]
- (recur (maybe;assume (type;apply (list var) expectedT))))
+ (^template [<tag> <instancer>]
+ (<tag> _)
+ (do @
+ [[_ instanceT] (&;with-type-env <instancer>)]
+ (recur (maybe;assume (type;apply (list instanceT) expectedT)))))
+ ([#;UnivQ tc;existential]
+ [#;ExQ tc;var])
(#;Var id)
(do @
@@ -106,5 +103,5 @@
(format "\n " (%n idx) " " (%code argC))))
(text;join-with "")))))
(do meta;Monad<Meta>
- [[applyT argsA] (&inference;apply-function analyse funcT args)]
+ [[applyT argsA] (&inference;general analyse funcT args)]
(wrap (la;apply argsA funcA)))))