\chapter{Language extensions} \label{c:extensions}
%HEVEA\cutname{extn.html}

This chapter describes language extensions and convenience features
that are implemented in OCaml, but not described in chapter \ref{c:refman}.


%HEVEA\cutdef{section}
\section{s:letrecvalues}{Recursive definitions of values}
%HEVEA\cutname{letrecvalues.html}
\input{letrecvalues.tex}

\section{s:recursive-modules}{Recursive modules}
\ikwd{module\@\texttt{module}}
\ikwd{and\@\texttt{and}}
%HEVEA\cutname{recursivemodules.html}
\input{recursivemodules.tex}

\section{s:private-types}{Private types}
%HEVEA\cutname{privatetypes.html}
\ikwd{private\@\texttt{private}}
\input{privatetypes.tex}

\section{s:locally-abstract}{Locally abstract types}
\ikwd{type\@\texttt{type}}
\ikwd{fun\@\texttt{fun}}
%HEVEA\cutname{locallyabstract.html}
\input{locallyabstract.tex}

\section{s:first-class-modules}{First-class modules}
\ikwd{module\@\texttt{module}}
\ikwd{val\@\texttt{val}}
\ikwd{with\@\texttt{with}}
\ikwd{and\@\texttt{and}}
%HEVEA\cutname{firstclassmodules.html}
\input{firstclassmodules.tex}

\section{s:module-type-of}{Recovering the type of a module}
%HEVEA\cutname{moduletypeof.html}
\ikwd{module\@\texttt{module}}
\ikwd{type\@\texttt{type}}
\ikwd{of\@\texttt{of}}
\ikwd{include\@\texttt{include}}
\input{moduletypeof.tex}

\section{s:signature-substitution}{Substituting inside a signature}
\ikwd{with\@\texttt{with}}
\ikwd{module\@\texttt{module}}
\ikwd{type\@\texttt{type}}
%HEVEA\cutname{signaturesubstitution.html}
\input{signaturesubstitution.tex}

\section{s:module-alias}{Type-level module aliases}
\ikwd{module\@\texttt{module}}
%HEVEA\cutname{modulealias.html}
\input{modulealias.tex}

\section{s:explicit-overriding-open}{Overriding in open statements}
\ikwd{open.\@\texttt{open\char33}}
%HEVEA\cutname{overridingopen.html}
\input{overridingopen.tex}

\section{s:gadts}{Generalized algebraic datatypes} \ikwd{type\@\texttt{type}}
\ikwd{match\@\texttt{match}}
%HEVEA\cutname{gadts.html}
\input{gadts.tex}

\section{s:bigarray-access}{Syntax for Bigarray access}
%HEVEA\cutname{bigarray.html}
\input{bigarray.tex}

\section{s:attributes}{Attributes}
%HEVEA\cutname{attributes.html}
\ikwd{when\@\texttt{when}}
\input{attributes.tex}

\section{s:extension-nodes}{Extension nodes}
%HEVEA\cutname{extensionnodes.html}
\input{extensionnodes.tex}

\section{s:extensible-variants}{Extensible variant types}
%HEVEA\cutname{extensiblevariants.html}
\input{extensiblevariants.tex}

\section{s:generative-functors}{Generative functors}
%HEVEA\cutname{generativefunctors.html}
\input{generativefunctors.tex}

\section{s:extension-syntax}{Extension-only syntax}
%HEVEA\cutname{extensionsyntax.html}
\input{extensionsyntax.tex}

\section{s:inline-records}{Inline records}
%HEVEA\cutname{inlinerecords.html}
\input{inlinerecords.tex}

\section{s:doc-comments}{Documentation comments}
%HEVEA\cutname{doccomments.html}
\input{doccomments.tex}

\section{s:index-operators}{Extended indexing operators }
%HEVEA\cutname{indexops.html}
\input{indexops.tex}

\section{s:empty-variants}{Empty variant types}
%HEVEA\cutname{emptyvariants.html}
(Introduced in 4.07.0)
\input{emptyvariants.tex}

\section{s:alerts}{Alerts}
%HEVEA\cutname{alerts.html}
\input{alerts.tex}

\section{s:generalized-open}{Generalized open statements}
%HEVEA\cutname{generalizedopens.html}
\input{generalizedopens.tex}

\section{s:binding-operators}{Binding operators}
%HEVEA\cutname{bindingops.html}
\input{bindingops.tex}

\section{s:effect-handlers}{Effect handlers}
%HEVEA\cutname{effects.html}
\input{effects.tex}


%HEVEA\cutend
