diff options
Diffstat (limited to '')
-rw-r--r-- | stdlib/source/polytypic/lux/abstract/equivalence.lux | 98 |
1 files changed, 49 insertions, 49 deletions
diff --git a/stdlib/source/polytypic/lux/abstract/equivalence.lux b/stdlib/source/polytypic/lux/abstract/equivalence.lux index 0c83b9ab5..bc044fe6b 100644 --- a/stdlib/source/polytypic/lux/abstract/equivalence.lux +++ b/stdlib/source/polytypic/lux/abstract/equivalence.lux @@ -48,50 +48,50 @@ inputT <type>.next .let [@Equivalence (is (-> Type Code) (function (_ type) - (` ((~! /.Equivalence) (~ (poly.code *env* type))))))]] + (` ((,! /.Equivalence) (, (poly.code *env* type))))))]] (all <>.either ... Basic types - (~~ (with_template [<matcher> <eq>] + (,, (with_template [<matcher> <eq>] [(do ! [_ <matcher>] - (in (` (is (~ (@Equivalence inputT)) + (in (` (is (, (@Equivalence inputT)) <eq>))))] - [(<type>.exactly Any) (function ((~ g!_) (~ g!_) (~ g!_)) #1)] - [(<type>.sub Bit) (~! bit.equivalence)] - [(<type>.sub Nat) (~! nat.equivalence)] - [(<type>.sub Int) (~! int.equivalence)] - [(<type>.sub Rev) (~! rev.equivalence)] - [(<type>.sub Frac) (~! frac.equivalence)] - [(<type>.sub Text) (~! text.equivalence)])) + [(<type>.exactly Any) (function ((, g!_) (, g!_) (, g!_)) #1)] + [(<type>.sub Bit) (,! bit.equivalence)] + [(<type>.sub Nat) (,! nat.equivalence)] + [(<type>.sub Int) (,! int.equivalence)] + [(<type>.sub Rev) (,! rev.equivalence)] + [(<type>.sub Frac) (,! frac.equivalence)] + [(<type>.sub Text) (,! text.equivalence)])) ... Composite types - (~~ (with_template [<name> <eq>] + (,, (with_template [<name> <eq>] [(do ! [[_ argC] (<type>.applied (<>.and (<type>.exactly <name>) equivalence))] - (in (` (is (~ (@Equivalence inputT)) - (<eq> (~ argC))))))] + (in (` (is (, (@Equivalence inputT)) + (<eq> (, argC))))))] - [.Maybe (~! maybe.equivalence)] - [.List (~! list.equivalence)] - [sequence.Sequence (~! sequence.equivalence)] - [array.Array (~! array.equivalence)] - [queue.Queue (~! queue.equivalence)] - [set.Set (~! set.equivalence)] - [tree.Tree (~! tree.equivalence)] + [.Maybe (,! maybe.equivalence)] + [.List (,! list.equivalence)] + [sequence.Sequence (,! sequence.equivalence)] + [array.Array (,! array.equivalence)] + [queue.Queue (,! queue.equivalence)] + [set.Set (,! set.equivalence)] + [tree.Tree (,! tree.equivalence)] )) (do ! [[_ _ valC] (<type>.applied (all <>.and (<type>.exactly dictionary.Dictionary) <type>.any equivalence))] - (in (` (is (~ (@Equivalence inputT)) - ((~! dictionary.equivalence) (~ valC)))))) + (in (` (is (, (@Equivalence inputT)) + ((,! dictionary.equivalence) (, valC)))))) ... Models - (~~ (with_template [<type> <eq>] + (,, (with_template [<type> <eq>] [(do ! [_ (<type>.exactly <type>)] - (in (` (is (~ (@Equivalence inputT)) + (in (` (is (, (@Equivalence inputT)) <eq>))))] [duration.Duration duration.equivalence] @@ -103,7 +103,7 @@ (do ! [_ (<type>.applied (<>.and (<type>.exactly unit.Measure) <type>.any))] - (in (` (is (~ (@Equivalence inputT)) + (in (` (is (, (@Equivalence inputT)) unit.equivalence)))) ... Variants (do ! @@ -112,19 +112,19 @@ g!_ (code.local "_____________") g!left (code.local "_____________left") g!right (code.local "_____________right")]] - (in (` (is (~ (@Equivalence inputT)) - (function ((~ g!_) (~ g!left) (~ g!right)) - (case [(~ g!left) (~ g!right)] - (~+ (list#conjoint (list#each (function (_ [tag g!eq]) + (in (` (is (, (@Equivalence inputT)) + (function ((, g!_) (, g!left) (, g!right)) + (case [(, g!left) (, g!right)] + (,* (list#conjoint (list#each (function (_ [tag g!eq]) (if (nat.= last tag) - (list (` [{(~ (code.nat (-- tag))) #1 (~ g!left)} - {(~ (code.nat (-- tag))) #1 (~ g!right)}]) - (` ((~ g!eq) (~ g!left) (~ g!right)))) - (list (` [{(~ (code.nat tag)) #0 (~ g!left)} - {(~ (code.nat tag)) #0 (~ g!right)}]) - (` ((~ g!eq) (~ g!left) (~ g!right)))))) + (list (` [{(, (code.nat (-- tag))) #1 (, g!left)} + {(, (code.nat (-- tag))) #1 (, g!right)}]) + (` ((, g!eq) (, g!left) (, g!right)))) + (list (` [{(, (code.nat tag)) #0 (, g!left)} + {(, (code.nat tag)) #0 (, g!right)}]) + (` ((, g!eq) (, g!left) (, g!right)))))) (list.enumeration members)))) - (~ g!_) + (, g!_) #0)))))) ... Tuples (do ! @@ -133,33 +133,33 @@ indices (list.indices (list.size g!eqs)) g!lefts (list#each (|>> nat#encoded (text#composite "left") code.local) indices) g!rights (list#each (|>> nat#encoded (text#composite "right") code.local) indices)]] - (in (` (is (~ (@Equivalence inputT)) - (function ((~ g!_) [(~+ g!lefts)] [(~+ g!rights)]) - (and (~+ (|> (list.zipped_3 g!eqs g!lefts g!rights) + (in (` (is (, (@Equivalence inputT)) + (function ((, g!_) [(,* g!lefts)] [(,* g!rights)]) + (and (,* (|> (list.zipped_3 g!eqs g!lefts g!rights) (list#each (function (_ [g!eq g!left g!right]) - (` ((~ g!eq) (~ g!left) (~ g!right))))))))))))) + (` ((, g!eq) (, g!left) (, g!right))))))))))))) ... Type recursion (do ! [[g!self bodyC] (<type>.recursive equivalence) .let [g!_ (code.local "_____________")]] - (in (` (is (~ (@Equivalence inputT)) - ((~! /.rec) (.function ((~ g!_) (~ g!self)) - (~ bodyC))))))) + (in (` (is (, (@Equivalence inputT)) + ((,! /.rec) (.function ((, g!_) (, g!self)) + (, bodyC))))))) <type>.recursive_self ... Type applications (do ! [[funcC argsC] (<type>.applied (<>.and equivalence (<>.many equivalence)))] - (in (` ((~ funcC) (~+ argsC))))) + (in (` ((, funcC) (,* argsC))))) ... Parameters <type>.parameter ... Polymorphism (do ! [[funcC varsC bodyC] (<type>.polymorphic equivalence)] - (in (` (is (All ((~ g!_) (~+ varsC)) - (-> (~+ (list#each (|>> (~) ((~! /.Equivalence)) (`)) varsC)) - ((~! /.Equivalence) ((~ (poly.code *env* inputT)) (~+ varsC))))) - (function ((~ funcC) (~+ varsC)) - (~ bodyC)))))) + (in (` (is (All ((, g!_) (,* varsC)) + (-> (,* (list#each (|>> (,) ((,! /.Equivalence)) (`)) varsC)) + ((,! /.Equivalence) ((, (poly.code *env* inputT)) (,* varsC))))) + (function ((, funcC) (,* varsC)) + (, bodyC)))))) <type>.recursive_call ... If all else fails... (|> <type>.any |