diff options
Diffstat (limited to 'stdlib/source/library/lux/type.lux')
-rw-r--r-- | stdlib/source/library/lux/type.lux | 132 |
1 files changed, 66 insertions, 66 deletions
diff --git a/stdlib/source/library/lux/type.lux b/stdlib/source/library/lux/type.lux index 7c347bd0e..c99823da1 100644 --- a/stdlib/source/library/lux/type.lux +++ b/stdlib/source/library/lux/type.lux @@ -33,7 +33,7 @@ (loop [num_args 0 type type] (case type - (<tag> env sub_type) + {<tag> env sub_type} (recur (++ num_args) sub_type) _ @@ -46,7 +46,7 @@ (def: .public (flat_function type) (-> Type [(List Type) Type]) (case type - (#.Function in out') + {#.Function in out'} (let [[ins out] (flat_function out')] [(list& in ins) out]) @@ -56,7 +56,7 @@ (def: .public (flat_application type) (-> Type [Type (List Type)]) (case type - (#.Apply arg func') + {#.Apply arg func'} (let [[func args] (flat_application func')] [func (list\composite args (list arg))]) @@ -67,7 +67,7 @@ [(def: .public (<name> type) (-> Type (List Type)) (case type - (<tag> left right) + {<tag> left right} (list& left (<name> right)) _ @@ -80,7 +80,7 @@ (def: .public (format type) (-> Type Text) (case type - (#.Primitive name params) + {#.Primitive name params} ($_ text\composite "(primitive " (text.enclosed' text.double_quote name) @@ -90,7 +90,7 @@ ")") (^template [<tag> <open> <close> <flat>] - [(<tag> _) + [{<tag> _} ($_ text\composite <open> (|> (<flat> type) (list\each format) @@ -101,7 +101,7 @@ ([#.Sum "(Or " ")" flat_variant] [#.Product "[" "]" flat_tuple]) - (#.Function input output) + {#.Function input output} (let [[ins out] (flat_function type)] ($_ text\composite "(-> " (|> ins @@ -111,26 +111,26 @@ (list\mix text\composite "")) " " (format out) ")")) - (#.Parameter idx) + {#.Parameter idx} (n\encoded idx) - (#.Var id) + {#.Var id} ($_ text\composite "⌈v:" (n\encoded id) "⌋") - (#.Ex id) + {#.Ex id} ($_ text\composite "⟨e:" (n\encoded id) "⟩") - (#.Apply param fun) + {#.Apply param fun} (let [[type_func type_args] (flat_application type)] ($_ text\composite "(" (format type_func) " " (|> type_args (list\each format) list.reversed (list.interposed " ") (list\mix text\composite "")) ")")) (^template [<tag> <desc>] - [(<tag> env body) + [{<tag> env body} ($_ text\composite "(" <desc> " {" (|> env (list\each format) (text.interposed " ")) "} " (format body) ")")]) ([#.UnivQ "All"] [#.ExQ "Ex"]) - (#.Named [module name] type) + {#.Named [module name] type} ($_ text\composite module "." name) )) @@ -138,27 +138,27 @@ (def: (reduced env type) (-> (List Type) Type Type) (case type - (#.Primitive name params) - (#.Primitive name (list\each (reduced env) params)) + {#.Primitive name params} + {#.Primitive name (list\each (reduced env) params)} (^template [<tag>] - [(<tag> left right) - (<tag> (reduced env left) (reduced env right))]) + [{<tag> left right} + {<tag> (reduced env left) (reduced env right)}]) ([#.Sum] [#.Product] [#.Function] [#.Apply]) (^template [<tag>] - [(<tag> old_env def) + [{<tag> old_env def} (case old_env #.End - (<tag> env def) + {<tag> env def} _ - (<tag> (list\each (reduced env) old_env) def))]) + {<tag> (list\each (reduced env) old_env) def})]) ([#.UnivQ] [#.ExQ]) - (#.Parameter idx) + {#.Parameter idx} (maybe.else (panic! ($_ text\composite "Unknown type parameter" text.new_line " Index: " (n\encoded idx) text.new_line @@ -183,7 +183,7 @@ @.php false] (same? x y)) (case [x y] - [(#.Primitive xname xparams) (#.Primitive yname yparams)] + [{#.Primitive xname xparams} {#.Primitive yname yparams}] (and (text\= xname yname) (n.= (list.size yparams) (list.size xparams)) (list\mix (.function (_ [x y] prev) (and prev (= x y))) @@ -191,26 +191,26 @@ (list.zipped/2 xparams yparams))) (^template [<tag>] - [[(<tag> xid) (<tag> yid)] + [[{<tag> xid} {<tag> yid}] (n.= yid xid)]) ([#.Var] [#.Ex] [#.Parameter]) - (^or [(#.Function xleft xright) (#.Function yleft yright)] - [(#.Apply xleft xright) (#.Apply yleft yright)]) + (^or [{#.Function xleft xright} {#.Function yleft yright}] + [{#.Apply xleft xright} {#.Apply yleft yright}]) (and (= xleft yleft) (= xright yright)) - [(#.Named xname xtype) (#.Named yname ytype)] + [{#.Named xname xtype} {#.Named yname ytype}] (and (name\= xname yname) (= xtype ytype)) (^template [<tag>] - [[(<tag> xL xR) (<tag> yL yR)] + [[{<tag> xL xR} {<tag> yL yR}] (and (= xL yL) (= xR yR))]) ([#.Sum] [#.Product]) - (^or [(#.UnivQ xenv xbody) (#.UnivQ yenv ybody)] - [(#.ExQ xenv xbody) (#.ExQ yenv ybody)]) + (^or [{#.UnivQ xenv xbody} {#.UnivQ yenv ybody}] + [{#.ExQ xenv xbody} {#.ExQ yenv ybody}]) (and (n.= (list.size yenv) (list.size xenv)) (= xbody ybody) (list\mix (.function (_ [x y] prev) (and prev (= x y))) @@ -225,21 +225,21 @@ (-> (List Type) Type (Maybe Type)) (case params #.End - (#.Some func) + {#.Some func} - (#.Item param params') + {#.Item param params'} (case func (^template [<tag>] - [(<tag> env body) + [{<tag> env body} (|> body (reduced (list& func param env)) (applied params'))]) ([#.UnivQ] [#.ExQ]) - (#.Apply A F) + {#.Apply A F} (applied (list& A params) F) - (#.Named name unnamed) + {#.Named name unnamed} (applied params unnamed) _ @@ -248,36 +248,36 @@ (def: .public (code type) (-> Type Code) (case type - (#.Primitive name params) - (` (#.Primitive (~ (code.text name)) - (.list (~+ (list\each code params))))) + {#.Primitive name params} + (` {#.Primitive (~ (code.text name)) + (.list (~+ (list\each code params)))}) (^template [<tag>] - [(<tag> idx) - (` (<tag> (~ (code.nat idx))))]) + [{<tag> idx} + (` {<tag> (~ (code.nat idx))})]) ([#.Var] [#.Ex] [#.Parameter]) (^template [<tag>] - [(<tag> left right) - (` (<tag> (~ (code left)) - (~ (code right))))]) + [{<tag> left right} + (` {<tag> (~ (code left)) + (~ (code right))})]) ([#.Sum] [#.Product] [#.Function] [#.Apply]) - (#.Named name sub_type) + {#.Named name sub_type} (code.identifier name) (^template [<tag>] - [(<tag> env body) - (` (<tag> (.list (~+ (list\each code env))) - (~ (code body))))]) + [{<tag> env body} + (` {<tag> (.list (~+ (list\each code env))) + (~ (code body))})]) ([#.UnivQ] [#.ExQ]) )) (def: .public (de_aliased type) (-> Type Type) (case type - (#.Named _ (#.Named name type')) - (de_aliased (#.Named name type')) + {#.Named _ {#.Named name type'}} + (de_aliased {#.Named name type'}) _ type)) @@ -285,7 +285,7 @@ (def: .public (anonymous type) (-> Type Type) (case type - (#.Named name type') + {#.Named name type'} (anonymous type') _ @@ -298,11 +298,11 @@ #.End <base> - (#.Item type #.End) + {#.Item type #.End} type - (#.Item type types') - (<ctor> type (<name> types'))))] + {#.Item type types'} + {<ctor> type (<name> types')}))] [variant Nothing #.Sum] [tuple Any #.Product] @@ -314,8 +314,8 @@ #.End output - (#.Item input inputs') - (#.Function input (function inputs' output)))) + {#.Item input inputs'} + {#.Function input (function inputs' output)})) (def: .public (application params quant) (-> (List Type) Type Type) @@ -323,15 +323,15 @@ #.End quant - (#.Item param params') - (application params' (#.Apply param quant)))) + {#.Item param params'} + (application params' {#.Apply param quant}))) (template [<name> <tag>] [(def: .public (<name> size body) (-> Nat Type Type) (case size 0 body - _ (|> body (<name> (-- size)) (<tag> (list)))))] + _ (|> body (<name> (-- size)) {<tag> (list)})))] [univ_q #.UnivQ] [ex_q #.ExQ] @@ -340,15 +340,15 @@ (def: .public (quantified? type) (-> Type Bit) (case type - (#.Named [module name] _type) + {#.Named [module name] _type} (quantified? _type) - (#.Apply A F) + {#.Apply A F} (|> (..applied (list A) F) (\ maybe.monad each quantified?) (maybe.else #0)) - (^or (#.UnivQ _) (#.ExQ _)) + (^or {#.UnivQ _} {#.ExQ _}) #1 _ @@ -361,12 +361,12 @@ _ (|> element_type (array (-- depth)) (list) - (#.Primitive array.type_name)))) + {#.Primitive array.type_name}))) (def: .public (flat_array type) (-> Type [Nat Type]) (case type - (^multi (^ (#.Primitive name (list element_type))) + (^multi (^ {#.Primitive name (list element_type)}) (text\= array.type_name name)) (let [[depth element_type] (flat_array element_type)] [(++ depth) element_type]) @@ -391,7 +391,7 @@ (<>.maybe (<>.after (<code>.identifier! ..secret_marker) <code>.any))) <code>.any)]) (case input - (#.Left [valueN valueC]) + {#.Left [valueN valueC]} (do meta.monad [location meta.location valueT (meta.type valueN) @@ -399,7 +399,7 @@ ($_ text\composite (name\encoded (name_of ..:log!)) " " (location.format location) text.new_line "Expression: " (case valueC - (#.Some valueC) + {#.Some valueC} (code.format valueC) #.None @@ -408,7 +408,7 @@ " Type: " (..format valueT)))]] (in (list (code.identifier valueN)))) - (#.Right valueC) + {#.Right valueC} (macro.with_identifiers [g!value] (in (list (` (.let [(~ g!value) (~ valueC)] (..:log! (~ valueC) (~ (code.identifier ..secret_marker)) (~ g!value))))))))) @@ -429,7 +429,7 @@ #.None (in (list casterC)) - (#.Some value) + {#.Some value} (in (list (` ((~ casterC) (~ value))))))))) (type: Typed |