diff options
author | Eduardo Julian | 2020-10-24 21:44:21 -0400 |
---|---|---|
committer | Eduardo Julian | 2020-10-24 21:44:21 -0400 |
commit | e153b011bb94ba95474505c307873616bb493b6d (patch) | |
tree | b68a68723bd33a19264c2ec83b379b07fbf30420 /stdlib/source/lux/abstract | |
parent | 0ebabc6e307d161ac4ef837aa492066d4320f6a9 (diff) |
Changed type-parameters for Mixin types.
Diffstat (limited to '')
-rw-r--r-- | stdlib/source/lux/abstract/hash.lux | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/stdlib/source/lux/abstract/hash.lux b/stdlib/source/lux/abstract/hash.lux index 62e72e52a..df2dd2e27 100644 --- a/stdlib/source/lux/abstract/hash.lux +++ b/stdlib/source/lux/abstract/hash.lux @@ -11,14 +11,29 @@ (: (-> a Nat) hash)) +(def: #export (sum left right) + (All [l r] (-> (Hash l) (Hash r) (Hash (| l r)))) + (structure + (def: &equivalence + (equivalence.sum (:: left &equivalence) + (:: right &equivalence))) + (def: (hash value) + (<| (:coerce Nat) + (case value + (#.Left value) + ("lux i64 *" +2 (:coerce Int (:: left hash value))) + + (#.Right value) + ("lux i64 *" +3 (:coerce Int (:: right hash value)))))))) + (def: #export (product left right) - (All [l r] (-> (Hash l) (Hash r) (Hash [l r]))) + (All [l r] (-> (Hash l) (Hash r) (Hash (& l r)))) (structure (def: &equivalence (equivalence.product (:: left &equivalence) (:: right &equivalence))) (def: (hash [leftV rightV]) (:coerce Nat - ("lux i64 *" + ("lux i64 +" (:coerce Int (:: left hash leftV)) (:coerce Int (:: right hash rightV))))))) |