module arch.system.types.commitment;

import prelude open;
import arch.node.types.crypto open;

type Commitment A :=
  mkCommitment@{
    committed : A;
    commitment : Digest;
  };

deriving instance
CommitmentEq {A} {{Eq A}} : Eq (Commitment A);

deriving instance
CommitmentOrd {A} {{Ord A}} : Ord (Commitment A);

makeCommitment {A} (a : A) : Commitment A :=
  mkCommitment@{
    committed := a;
    commitment := hash a;
  };