/-
Copyright (c) 2016 Microsoft Corporation. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Leonardo de Moura
-/
prelude
import init.data.usize init.data.string
universes u

class hashable (α : Type u) :=
(hash : α → usize)

export hashable (hash)

-- TODO: mark as builtin and opaque
def mix_hash (u₁ u₂ : usize) : usize :=
default usize

-- TODO: mark as builtin
protected def string.hash (s : string) : usize :=
default usize

instance : hashable string := ⟨string.hash⟩

-- TODO: add builtin
protected def nat.hash (n : nat) : usize :=
usize.of_nat n

instance : hashable nat := ⟨nat.hash⟩
