1signature monadsyntax =
2sig
3
4
5  include Abbrev
6  (* loading this module installs this function as an absyn transformer
7     under the name "monadsyntax.transform_absyn"
8  *)
9  val transform_absyn : term_grammar.absyn_postprocessor
10  val print_monads : term_grammar.userprinter
11
12  (* enable/add forms are aliases for each other; add version for backwards
13     compatibility *)
14  val add_monadsyntax : unit -> unit
15  val temp_add_monadsyntax : unit -> unit
16  val enable_monadsyntax : unit -> unit
17  val temp_enable_monadsyntax : unit -> unit
18
19  val disable_monadsyntax : unit -> unit
20  val temp_disable_monadsyntax : unit -> unit
21
22  type monadinfo =
23       { bind : term,
24         ignorebind : term option,
25         unit : term,
26         fail : term option,
27         choice : term option,
28         guard : term option }
29  val declare_monad : string * monadinfo -> unit
30  val all_monads : unit -> (string * monadinfo) list
31
32  val enable_monad : string -> unit
33  val temp_enable_monad : string -> unit
34
35  val weak_enable_monad : string -> unit
36  val temp_weak_enable_monad : string -> unit
37
38  val disable_monad : string -> unit
39  val temp_disable_monad : string -> unit
40
41
42end
43