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