Industrial strength, full-featured build system
type t
val reasons : t -> (Reason.t * Goal.t list) list

The list of individual errors together with dependency traces. (a, b,c,d) means "error 'a' happened at subgoal 'd', which was a part of subgoal 'c', which was a part of subgoal 'b'".

val reasons_here : t -> Reason.t list

The list of errors that happened at the current subgoal. This should be true: reasons_here t = List.filter_map (reasons t) ~f:(function | (r, []) -> Some r | (r, _) -> None)

val needs_in_error : t -> Goal.Set.t

This is a superset of the needs listed in reasons because a single Reason.t can be reachable by multiple path, all of needs along which are going to be in error.

val create : Reason.t -> t
val all : t list -> t
val subgoal : Goal.t -> t -> t