aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/lux/lang/analysis.lux
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/source/lux/lang/analysis.lux')
-rw-r--r--stdlib/source/lux/lang/analysis.lux16
1 files changed, 14 insertions, 2 deletions
diff --git a/stdlib/source/lux/lang/analysis.lux b/stdlib/source/lux/lang/analysis.lux
index 6b2ba097d..223f2fb29 100644
--- a/stdlib/source/lux/lang/analysis.lux
+++ b/stdlib/source/lux/lang/analysis.lux
@@ -55,6 +55,8 @@
(type: #export Tuple (List Analysis))
+(type: #export Application [Analysis (List Analysis)])
+
(do-template [<name> <tag>]
[(def: <name>
(-> Analysis Analysis)
@@ -103,8 +105,8 @@
(list/fold (function (_ left right) (#Structure (#Product left right)))
last prevs)))
-(def: #export (apply args func)
- (-> (List Analysis) Analysis Analysis)
+(def: #export (apply [func args])
+ (-> Application Analysis)
(list/fold (function (_ arg func) (#Apply arg func)) func args))
(type: #export Analyser
@@ -141,3 +143,13 @@
_
#.None)))
+
+(def: #export (application analysis)
+ (-> Analysis Application)
+ (case analysis
+ (#Apply head func)
+ (let [[func' tail] (application func)]
+ [func' (#.Cons head tail)])
+
+ _
+ [analysis (list)]))