aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/lux/abstract
diff options
context:
space:
mode:
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)))))