sig
  type rule =
      Implies_not of Hygiene.pattern * Hygiene.pattern
    | Not of Hygiene.pattern
  and pattern = Hygiene.suffix
  and suffix = string
  type penalty = Warn | Fail
  type law = {
    law_name : string;
    law_rules : Hygiene.rule list;
    law_penalty : Hygiene.penalty;
  }
  val check :
    ?sanitize:string ->
    Hygiene.law list -> bool Slurp.entry -> (Hygiene.law * string list) list
end