diff options
Diffstat (limited to '')
-rw-r--r-- | stdlib/source/library/lux/type/implicit.lux | 13 |
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) |