aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/lux/type/abstract.lux
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/source/lux/type/abstract.lux')
-rw-r--r--stdlib/source/lux/type/abstract.lux112
1 files changed, 54 insertions, 58 deletions
diff --git a/stdlib/source/lux/type/abstract.lux b/stdlib/source/lux/type/abstract.lux
index 22a21cc9c..46cbd641b 100644
--- a/stdlib/source/lux/type/abstract.lux
+++ b/stdlib/source/lux/type/abstract.lux
@@ -1,5 +1,5 @@
(.module:
- [lux (#- Scope)
+ [lux #*
[abstract
[monad (#+ Monad do)]]
[control
@@ -34,14 +34,14 @@
(All [a] (-> (Stack a) (Maybe (Stack a))))
list.tail)
-(type: Scope
+(type: #export Frame
{#name Text
#type-vars (List Code)
#abstraction Code
#representation Code})
-(def: scopes
- (Stack Scope)
+(def: frames
+ (Stack Frame)
#.Nil)
(template: (!peek <source> <reference> <then>)
@@ -55,53 +55,49 @@
#.Nil
(undefined))))
-(def: (peek-scopes-definition reference source)
- (-> Text (List [Text Global]) (Stack Scope))
+(def: (peek-frames-definition reference source)
+ (-> Text (List [Text Global]) (Stack Frame))
(!peek source reference
(case head
(#.Left _)
(undefined)
- (#.Right [exported? scope-type scope-anns scope-value])
- (:coerce (Stack Scope) scope-value))))
+ (#.Right [exported? frame-type frame-anns frame-value])
+ (:coerce (Stack Frame) frame-value))))
-(def: (peek-scopes reference definition-reference source)
- (-> Text Text (List [Text Module]) (Stack Scope))
+(def: (peek-frames reference definition-reference source)
+ (-> Text Text (List [Text Module]) (Stack Frame))
(!peek source reference
- (peek-scopes-definition definition-reference (get@ #.definitions head))))
+ (peek-frames-definition definition-reference (get@ #.definitions head))))
-(exception: #export no-active-scopes)
+(exception: #export no-active-frames)
-(def: (peek! scope)
- (-> (Maybe Text) (Meta Scope))
+(def: (peek! frame)
+ (-> (Maybe Text) (Meta Frame))
(function (_ compiler)
- (let [[reference definition-reference] (name-of ..scopes)
- current-scopes (peek-scopes reference definition-reference (get@ #.modules compiler))]
- (case (case scope
- (#.Some scope)
+ (let [[reference definition-reference] (name-of ..frames)
+ current-frames (peek-frames reference definition-reference (get@ #.modules compiler))]
+ (case (case frame
+ (#.Some frame)
(list.find (function (_ [actual _])
- (text@= scope actual))
- current-scopes)
+ (text@= frame actual))
+ current-frames)
#.None
- (..peek current-scopes))
- (#.Some scope)
- (#.Right [compiler scope])
+ (..peek current-frames))
+ (#.Some frame)
+ (#.Right [compiler frame])
#.None
- (exception.throw ..no-active-scopes [])))))
+ (exception.throw ..no-active-frames [])))))
(def: #export current
- (Meta [Text (List Text)])
- (do meta.monad
- [[name type-vars abstraction representation] (..peek! #.None)]
- (wrap [name (list@map code.format type-vars)])))
+ (Meta Frame)
+ (..peek! #.None))
(def: #export (specific name)
- (-> Text (Meta (List Text)))
- (do meta.monad
- [[name type-vars abstraction representation] (..peek! (#.Some name))]
- (wrap (list@map code.format type-vars))))
+ (-> Text (Meta Frame))
+ (..peek! (#.Some name)))
(template: (!push <source> <reference> <then>)
(loop [entries <source>]
@@ -116,60 +112,60 @@
#.Nil
(undefined))))
-(def: (push-scope-definition reference scope source)
- (-> Text Scope (List [Text Global]) (List [Text Global]))
+(def: (push-frame-definition reference frame source)
+ (-> Text Frame (List [Text Global]) (List [Text Global]))
(!push source reference
(case head
(#.Left _)
(undefined)
- (#.Right [exported? scopes-type scopes-anns scopes-value])
+ (#.Right [exported? frames-type frames-anns frames-value])
(#.Right [exported?
- scopes-type
- scopes-anns
- (..push scope (:coerce (Stack Scope) scopes-value))]))))
+ frames-type
+ frames-anns
+ (..push frame (:coerce (Stack Frame) frames-value))]))))
-(def: (push-scope [module-reference definition-reference] scope source)
- (-> Name Scope (List [Text Module]) (List [Text Module]))
+(def: (push-frame [module-reference definition-reference] frame source)
+ (-> Name Frame (List [Text Module]) (List [Text Module]))
(!push source module-reference
- (update@ #.definitions (push-scope-definition definition-reference scope) head)))
+ (update@ #.definitions (push-frame-definition definition-reference frame) head)))
-(def: (push! scope)
- (-> Scope (Meta Any))
+(def: (push! frame)
+ (-> Frame (Meta Any))
(function (_ compiler)
(#.Right [(update@ #.modules
- (..push-scope (name-of ..scopes) scope)
+ (..push-frame (name-of ..frames) frame)
compiler)
[]])))
-(def: (pop-scope-definition reference source)
+(def: (pop-frame-definition reference source)
(-> Text (List [Text Global]) (List [Text Global]))
(!push source reference
(case head
(#.Left _)
(undefined)
- (#.Right [exported? scopes-type scopes-anns scopes-value])
+ (#.Right [exported? frames-type frames-anns frames-value])
(#.Right [exported?
- scopes-type
- scopes-anns
- (let [current-scopes (:coerce (Stack Scope) scopes-value)]
- (case (..pop current-scopes)
- (#.Some current-scopes')
- current-scopes'
+ frames-type
+ frames-anns
+ (let [current-frames (:coerce (Stack Frame) frames-value)]
+ (case (..pop current-frames)
+ (#.Some current-frames')
+ current-frames'
#.None
- current-scopes))]))))
+ current-frames))]))))
-(def: (pop-scope [module-reference definition-reference] source)
+(def: (pop-frame [module-reference definition-reference] source)
(-> Name (List [Text Module]) (List [Text Module]))
(!push source module-reference
- (|> head (update@ #.definitions (pop-scope-definition definition-reference)))))
+ (|> head (update@ #.definitions (pop-frame-definition definition-reference)))))
(syntax: (pop!)
(function (_ compiler)
(#.Right [(update@ #.modules
- (..pop-scope (name-of ..scopes))
+ (..pop-frame (name-of ..frames))
compiler)
(list)])))
@@ -179,9 +175,9 @@
(<>.and (<>@wrap #.None) <c>.any)))
(template [<name> <from> <to>]
- [(syntax: #export (<name> {[scope value] ..cast})
+ [(syntax: #export (<name> {[frame value] ..cast})
(do meta.monad
- [[name type-vars abstraction representation] (peek! scope)]
+ [[name type-vars abstraction representation] (peek! frame)]
(wrap (list (` ((~! :cast) [(~+ type-vars)] (~ <from>) (~ <to>)
(~ value)))))))]