diff options
Diffstat (limited to 'stdlib/source/lux/abstract')
-rw-r--r-- | stdlib/source/lux/abstract/hash.lux | 13 |
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))))) |