diff options
Diffstat (limited to 'new-luxc/source/luxc/lang/analysis/function.lux')
-rw-r--r-- | new-luxc/source/luxc/lang/analysis/function.lux | 19 |
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))))) |