sig
type 'a t
type 'a examiner
type permutation
val id : Teacher.permutation
val shuffle : Teacher.permutation
val fixed_shuffle : Teacher.permutation
val empty : 'a Teacher.t
val make_teacher :
'a array -> Teacher.permutation -> ('b -> 'a -> 'b) -> 'b Teacher.t
val teacher_of_fun : ('a -> 'a) -> 'a Teacher.t
val ( |-> ) : 'a Teacher.t -> 'a Teacher.t -> 'a Teacher.t
val repeat : 'a Teacher.t -> int -> 'a Teacher.t
val callback_student : ('a -> unit) -> 'a Teacher.t
val callback_grades : (float list list -> unit) -> 'a Teacher.t
val callback_both : ('a -> float list list -> unit) -> 'a Teacher.t
val reset_grades : 'a Teacher.t
val ignore_grades : 'a Teacher.t -> 'a Teacher.t
val really_ignore_grades : 'a Teacher.t -> 'a Teacher.t
val teach_until_student :
('a -> bool) -> ?max:int -> 'a Teacher.t -> 'a Teacher.t
val teach_until_grades :
(float list list -> bool) -> ?max:int -> 'a Teacher.t -> 'a Teacher.t
val teach_until_both :
('a -> float list list -> bool) ->
?max:int -> 'a Teacher.t -> 'a Teacher.t
val teach_sync : unit Event.event -> 'a Teacher.t
val teach : 'a Teacher.t -> 'a -> 'a
val teach_graded :
'a Teacher.t -> 'a Teacher.examiner list -> 'a -> 'a * float list list
val make_strukture_exam : ('a -> float) -> 'a Teacher.examiner
val make_data_exam : ('a -> 'b -> float) -> 'b array -> 'a Teacher.examiner
val make_exam : 'a Teacher.examiner list -> 'a -> float list
val print_grades : float list list -> unit
end