Module Ocamlary
This is an interface with all of the module system features. This documentation demonstrates:
A numbered list:
- 3
- 2
- 1
David Sheets is the author.
You may find more information about this HTML documentation renderer at github.com/dsheets/ocamlary.
This is some verbatim text:
verbatim
This is some verbatim text:
[][df[]]}}
Here is some raw LaTeX:
Here is an index table of Empty modules:
Odoc doesn't support {!indexlist}.
Here is some superscript: x2
Here is some subscript: x0
Here are some escaped brackets: { [ @ ] }
Here is some emphasis followed by code.
An unassociated comment
Level 1
Level 2
Level 3
Level 4
Basic module stuff
module Empty : sig ... endmodule type Empty = sig ... endAn ambiguous, misnamed module type
An ambiguous, misnamed module type
Section 9000
module EmptyAlias = EmptyA plain module alias of Empty
EmptySig
A plain, empty module signature
A plain, empty module signature alias of
A plain module of a signature of EmptySig (reference)
A plain module with an alias signature
There's a signature in a module in this signature.
For a good time, see A Labeled Section Header Inside of a Signature or Another Labeled Section Header Inside of a Signature or SuperSig.EmptySig. Section Section 9000 is also interesting. EmptySig is the section and EmptySig is the module signature.
References are resolved after everything, so {!Buffer.t} won't resolve.
Some text before exception title.
Basic exception stuff
After exception title.
Unary exception constructor
exception Kablam of unit * unitBinary exception constructor
exception Kapow of unit * unitUnary exception constructor over binary tuple
type ('a, 'b) a_function = 'a -> 'bval a_function : x:int -> intThis is a_function with param and return type.
val fun_maybe : ?yes:unit -> unit -> intval not_found : unit -> unitval since_mesozoic : unitThis value was introduced in the Mesozoic era.
This value has had changes in 1.0.0, 1.1.0, and 1.2.0.
Some Operators
Advanced Module Stuff
This comment is for CollectionModule.
This comment is for CollectionModule.
module type MMM = sig ... endmodule type A = sig ... endmodule type B = sig ... endmodule type C = sig ... endThis module type includes two signatures.
This comment is for FunctorTypeOf.
This comment is for IncludeModuleType.
Advanced Type Stuff
type record = {field1 : int;This comment is for field1.
field2 : int;This comment is for field2.
}This comment is for record.
This comment is also for record.
type mutable_record = {mutable a : int;b : unit;b is second and immutable
mutable c : int;
}type universe_record = {nihilate : 'a. 'a -> unit;
}type variant = | TagAThis comment is for TagA.
| ConstrB of intThis comment is for ConstrB.
| ConstrC of int * intThis comment is for binary ConstrC.
| ConstrD of int * intThis comment is for unary ConstrD of binary tuple.
This comment is for variant.
This comment is also for variant.
type poly_variant = [ | `TagA| `ConstrB of int
]This comment is for poly_variant.
Wow! It was a polymorphic variant!
This comment is for full_gadt.
Wow! It was a GADT!
This comment is for partial_gadt.
Wow! It was a mixed GADT!
This comment is for alias.
This comment is for tuple.
type variant_alias = variant = | TagA| ConstrB of int| ConstrC of int * int| ConstrD of int * int
This comment is for variant_alias.
type record_alias = record = {field1 : int;field2 : int;
}This comment is for record_alias.
This comment is for poly_variant_union.
type 'a poly_poly_variant = [ | `TagA of 'a
]type ('a, 'b) bin_poly_poly_variant = [ | `TagA of 'a| `ConstrB of 'b
]type 'a open_poly_variant = [> `TagA ] as 'atype 'a open_poly_variant2 = [> `ConstrB of int ] as 'atype 'a poly_fun = ([> `ConstrB of int ] as 'a) -> 'atype 'a poly_fun_constraint = 'a -> 'a constraint 'a = [> `TagA ]type 'a closed_poly_variant = [< `One | `Two ] as 'atype 'a clopen_poly_variant = [< `One | `Two of int | `Three Two Three ] as 'atype nested_poly_variant = [ | `A| `B of [ `B1 | `B2 ]| `C| `D of [ `D1 of [ `D1a ] ]
]This comment is for full_gadt_alias.
This comment is for partial_gadt_alias.
exception Exn_arrow : unit -> exnand mutual_constr_b = | B| A_ish of mutual_constr_aThis comment must be here for the next to associate correctly.
type rec_obj = < f : int ; g : unit -> unit ; h : rec_obj >type 'a open_obj = < f : int ; g : unit -> unit.. > as 'atype 'a oof = (< a : unit.. > as 'a) -> 'atype 'a any_obj = < .. > as 'atype one_meth = < meth : unit >A mystery wrapped in an ellipsis
type ext += | ExtC of unit| ExtD of ext
type ext += private | ExtF
type poly_ext += | Foo of 'b| Bar of 'b * 'b
val launch_missiles : unit -> unitRotate keys on my mark...
A brown paper package tied up with string
module Dep1 : sig ... endmodule Dep2 (Arg : sig ... end) : sig ... endmodule Dep3 : sig ... endmodule Dep4 : sig ... endmodule Dep5 (Arg : sig ... end) : sig ... endmodule Dep6 : sig ... endmodule Dep7 (Arg : sig ... end) : sig ... endmodule Dep8 : sig ... endmodule Dep9 (X : sig ... end) : sig ... endmodule Dep11 : sig ... endmodule Dep12 (Arg : sig ... end) : sig ... endmodule type With1 = sig ... endmodule With2 : sig ... endmodule With5 : sig ... endmodule With6 : sig ... endmodule With7 (X : sig ... end) : sig ... endmodule With9 : sig ... endTrying the {!modules: ...} command.
With ocamldoc, toplevel units will be linked and documented, while submodules will behave as simple references.
With odoc, everything should be resolved (and linked) but only toplevel units will be documented.
Weirder usages involving module types
Playing with @canonical paths
Some ref to CanonicalTest.Base_Tests.C.t and CanonicalTest.Base_Tests.L.id. But also to CanonicalTest.Base.List and CanonicalTest.Base.List.t
Aliases again
Let's imitate jst's layout.
Section title splicing
I can refer to
But also to things in submodules:
And just to make sure we do not mess up:
{{!section:indexmodules}A} : A{{!aliases}B} : B{{!section:SuperSig.SubSigA.subSig}C} : C{{!Aliases.incl}D} : D
New reference syntax
module type M = sig ... endHere goes:
{!module-M.t} : M.t{!module-type-M.t} : M.t