hash :: (Hashable a) => a -> Hash
「hashが衝突しない」という仮定の下では、この関数の存在は「Hash
は全てのHashable
な型たちから成るDisjoint Unionを部分に含む」という意味になるのではないだろうか?そうすると色々と面白いことが考えられる。
実質的にDisjoint Unionと捉えても問題ないため、結局は「データ構造からEq
に関わる成分だけを取り出したもの」と考えることができる。
そしてデータ構造には様々なEq
があるが、その実装をエンコードできる場合があるのではないだろうか。というのは自由代数に定まるべき等価性をそのまま扱えるのではないかという気持ちである。
saltまで入れると色々と法則が複雑になりそうだが、「可換なハッシュ」「結合的なハッシュ」「冪等なハッシュ」とかあったら楽しいのでは
- 冪等なハッシュは集合をそのまま再現できる気がするので実際には構成不能な感じがある
これは共通部分式の検出に使えそうという話