aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/library/lux/type/implicit.lux
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--stdlib/source/library/lux/type/implicit.lux13
1 files changed, 11 insertions, 2 deletions
diff --git a/stdlib/source/library/lux/type/implicit.lux b/stdlib/source/library/lux/type/implicit.lux
index b6b351262..74853320d 100644
--- a/stdlib/source/library/lux/type/implicit.lux
+++ b/stdlib/source/library/lux/type/implicit.lux
@@ -365,7 +365,7 @@
(#.Right [args _])
(do {! meta.monad}
- [labels (|> (macro.gensym "") (list.repeat (list.size args)) (monad.seq !))]
+ [labels (|> (macro.gensym "") (list.repeated (list.size args)) (monad.seq !))]
(in (list (` (let [(~+ (|> args (list.zipped/2 labels) (list\map ..pair_list) list\join))]
(..\\ (~ (code.identifier member)) (~+ labels)))))))
))
@@ -373,7 +373,7 @@
(def: (implicit_bindings amount)
(-> Nat (Meta (List Code)))
(|> (macro.gensym "g!implicit")
- (list.repeat amount)
+ (list.repeated amount)
(monad.seq meta.monad)))
(def: implicits
@@ -381,6 +381,10 @@
(<code>.tuple (<>.many <code>.any)))
(syntax: .public (with {implementations ..implicits} body)
+ {#.doc (doc "Establish lexical bindings for implementations that will be prioritized over non-lexically-bound implementations."
+ (with [n.addition]
+ (n.= (\ n.addition compose left right)
+ (\\ compose left right))))}
(do meta.monad
[g!implicit+ (implicit_bindings (list.size implementations))]
(in (list (` (let [(~+ (|> (list.zipped/2 g!implicit+ implementations)
@@ -390,6 +394,11 @@
(~ body)))))))
(syntax: .public (implicit: {implementations ..implicits})
+ {#.doc (doc "Establish local definitions for implementations that will be prioritized over foreign definitions."
+ (implicit: [n.multiplication])
+
+ (n.= (\ n.multiplication compose left right)
+ (\\ compose left right)))}
(do meta.monad
[g!implicit+ (implicit_bindings (list.size implementations))]
(in (|> (list.zipped/2 g!implicit+ implementations)