package markup

  1. Overview
  2. Docs

Markup.ml interface for monadic I/O libraries such as Lwt and Async. This signature is included in the signature of Markup_lwt, with type 'a io replaced by 'a Lwt.t. To use the functions in this interface, use Markup_lwt. A Markup_async module has not (yet) been implemented.

All of the functions here correspond directly to functions in Markup with the same name. See that module for details on each function.

The difference is that functions here can take 'a io (i.e. 'a Lwt.t) threads instead of plain functions as arguments. As a consequence, all of them evaluate to either async streams, or to threads of type 'a io.

Note that several functions in Markup can take async streams as arguments, such as Markup.map, Markup.parse_xml, or Markup.trim. Where those functions, like Markup.trim, don't take another function as argument, they are not duplicated in this signature. Markup.map and Markup.parse_xml are provided here because some of their function arguments are replaced by 'a io threads.

All functions here accept both sync and async streams as arguments.

Threads

type 'a io

Thread type. Replaced by 'a Lwt.t in Markup_lwt.

Encodings

module Encoding : sig ... end

Asynchronous counterpart to Markup.Encoding.

XML

val parse_xml : ?report:(location -> Error.t -> unit io) -> ?encoding:Encoding.t -> ?namespace:(string -> string option) -> ?entity:(string -> string option) -> ?context:[< `Document | `Fragment ] -> (char, _) stream -> async parser
val write_xml : ?report:((signal * int) -> Error.t -> unit io) -> ?prefix:(string -> string option) -> ([< signal ], _) stream -> (char, async) stream

HTML

val parse_html : ?report:(location -> Error.t -> unit io) -> ?encoding:Encoding.t -> ?context:[< `Document | `Fragment of string ] -> (char, _) stream -> async parser
val write_html : ([< signal ], _) stream -> (char, async) stream

I/O

val fn : (unit -> char option io) -> (char, async) stream
val to_string : (char, _) stream -> string io
val to_buffer : (char, _) stream -> Buffer.t io

Stream manipulation

val stream : (unit -> 'a option io) -> ('a, async) stream
val next : ('a, _) stream -> 'a option io
val peek : ('a, _) stream -> 'a option io
val transform : ('a -> 'b -> ('c list * 'a option) io) -> 'a -> ('b, _) stream -> ('c, async) stream
val fold : ('a -> 'b -> 'a io) -> 'a -> ('b, _) stream -> 'a io
val map : ('a -> 'b io) -> ('a, _) stream -> ('b, async) stream
val filter : ('a -> bool io) -> ('a, _) stream -> ('a, async) stream
val filter_map : ('a -> 'b option io) -> ('a, _) stream -> ('b, async) stream
val iter : ('a -> unit io) -> ('a, _) stream -> unit io
val drain : ('a, _) stream -> unit io
val to_list : ('a, _) stream -> 'a list io
val load : ('a, _) stream -> ('a, sync) stream io

load s converts a general stream s to a synchronous stream by buffering it.

Utility

val tree : ?text:(string list -> 'a) -> ?element:(name -> (name * string) list -> 'a list -> 'a) -> ?comment:(string -> 'a) -> ?pi:(string -> string -> 'a) -> ?xml:(xml_declaration -> 'a) -> ?doctype:(doctype -> 'a) -> ([< signal ], _) stream -> 'a option io