From 2607c95980e87f5f270e1fe6eaf7a7b3311ca138 Mon Sep 17 00:00:00 2001
From: Eduardo Julian
Date: Sun, 3 Feb 2019 01:38:44 -0400
Subject: Improved syntax for domains/parallel-import-trees.
---
stdlib/source/lux.lux | 41 ++++++++++++++++++++++++++---------------
1 file changed, 26 insertions(+), 15 deletions(-)
(limited to 'stdlib/source')
diff --git a/stdlib/source/lux.lux b/stdlib/source/lux.lux
index c22036ef2..d3a0f1825 100644
--- a/stdlib/source/lux.lux
+++ b/stdlib/source/lux.lux
@@ -4246,23 +4246,17 @@
" Relative Root: " relative-root ..new-line))))))
(def: (alter-domain alteration domain import)
- (-> Int Text Importation Importation)
+ (-> Nat Text Importation Importation)
(let [[import-name import-alias import-refer] import
original (text/split-all-with ..module-separator import-name)
- [pre post] (if (i/< +0 alteration)
- [(list) (list/drop (.nat (i/* -1 alteration)) original)]
- [(list/take (.nat alteration) original)
- (list/drop (.nat alteration) original)])
- altered ($_ list/compose
- pre
- (case domain
- ""
- (list)
+ truncated (list/drop (.nat alteration) original)
+ parallel (case domain
+ ""
+ truncated
- _
- (list domain))
- post)]
- {#import-name (text/join-with ..module-separator altered)
+ _
+ (list& domain truncated))]
+ {#import-name (text/join-with ..module-separator parallel)
#import-alias import-alias
#import-refer import-refer}))
@@ -4273,6 +4267,7 @@
(: (-> Code (Meta (List Importation)))
(function (_ token)
(case token
+ ## Simple
[_ (#Identifier ["" m-name])]
(do Monad
[m-name (clean-module nested? relative-root m-name)]
@@ -4281,6 +4276,7 @@
#import-refer {#refer-defs #All
#refer-open (list)}})))
+ ## Nested
(^ [_ (#Tuple (list& [_ (#Identifier ["" m-name])] extra))])
(do Monad
[import-name (clean-module nested? relative-root m-name)
@@ -4311,10 +4307,25 @@
#refer-open openings}}
sub-imports)))
- (^ [_ (#Record (list [[_ (#Tuple (list [_ (#Int alteration)] [_ (#Text domain)]))]
+ ## Parallel
+ (^ [_ (#Record (list [[_ (#Tuple (list [_ (#Nat alteration)]
+ [_ (#Tag ["" domain])]))]
+ parallel-tree]))])
+ (do Monad
+ [parallel-imports (parse-imports nested? relative-root (list parallel-tree))]
+ (wrap (list/map (alter-domain alteration domain) parallel-imports)))
+
+ (^ [_ (#Record (list [[_ (#Nat alteration)]
parallel-tree]))])
(do Monad
[parallel-imports (parse-imports nested? relative-root (list parallel-tree))]
+ (wrap (list/map (alter-domain alteration "") parallel-imports)))
+
+ (^ [_ (#Record (list [[_ (#Tag ["" domain])]
+ parallel-tree]))])
+ (do Monad
+ [parallel-imports (parse-imports nested? relative-root (list parallel-tree))
+ #let [alteration (list/size (text/split-all-with ..module-separator domain))]]
(wrap (list/map (alter-domain alteration domain) parallel-imports)))
_
--
cgit v1.2.3