aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/lux/abstract
diff options
context:
space:
mode:
authorEduardo Julian2019-07-24 20:25:55 -0400
committerEduardo Julian2019-07-24 20:25:55 -0400
commite87fba1b7204ee611dcb5528b8a8a3716588c976 (patch)
tree77420205b2617c189a26af573b341771bf361b59 /stdlib/source/lux/abstract
parentedcc0a2433722d09e7b1ef7922e7fa1f51e7fc15 (diff)
Small improvements here and there.
Diffstat (limited to 'stdlib/source/lux/abstract')
-rw-r--r--stdlib/source/lux/abstract/hash.lux13
1 files changed, 11 insertions, 2 deletions
diff --git a/stdlib/source/lux/abstract/hash.lux b/stdlib/source/lux/abstract/hash.lux
index d2dee3bcb..752227fb7 100644
--- a/stdlib/source/lux/abstract/hash.lux
+++ b/stdlib/source/lux/abstract/hash.lux
@@ -1,9 +1,8 @@
(.module:
lux
[//
- [equivalence (#+ Equivalence)]])
+ ["." equivalence (#+ Equivalence)]])
-## [Signatures]
(signature: #export (Hash a)
{#.doc (doc "A way to produce hash-codes for a type's instances."
"A necessity when working with some data-structures, such as dictionaries or sets.")}
@@ -11,3 +10,13 @@
&equivalence)
(: (-> a Nat)
hash))
+
+(def: #export (product leftH rightH)
+ (All [l r] (-> (Hash l) (Hash r) (Hash [l r])))
+ (structure
+ (def: &equivalence
+ (equivalence.product (:: leftH &equivalence)
+ (:: rightH &equivalence)))
+ (def: (hash [leftV rightV])
+ (n/* (:: leftH hash leftV)
+ (:: rightH hash rightV)))))