manual: move pattern open out of the extension chapter (#8950)
* move the grammar description to the pattern section of the language reference * add a small example in the module chapter of the tutorialmaster
parent
452c3df125
commit
cb11bcf50a
6
Changes
6
Changes
|
@ -156,6 +156,12 @@ Working version
|
||||||
- #1939, #2023: Implement Unix.truncate and Unix.ftruncate on Windows.
|
- #1939, #2023: Implement Unix.truncate and Unix.ftruncate on Windows.
|
||||||
(Florent Monnier and Nicolás Ojeda Bär, review by David Allsopp)
|
(Florent Monnier and Nicolás Ojeda Bär, review by David Allsopp)
|
||||||
|
|
||||||
|
### Manual and documentation:
|
||||||
|
|
||||||
|
- #8950: manual, move local opens in pattern out of the extension chapter
|
||||||
|
(Florian Angeletti, review and suggestion by Gabriel Scherer)
|
||||||
|
|
||||||
|
|
||||||
### Compiler user-interface and warnings:
|
### Compiler user-interface and warnings:
|
||||||
|
|
||||||
- #8833: Hint for (type) redefinitions in toplevel session
|
- #8833: Hint for (type) redefinitions in toplevel session
|
||||||
|
|
|
@ -330,34 +330,6 @@ constructors of [t] could be present.
|
||||||
Similarly to abstract types, the variance of type parameters
|
Similarly to abstract types, the variance of type parameters
|
||||||
is not inferred, and must be given explicitly.
|
is not inferred, and must be given explicitly.
|
||||||
|
|
||||||
|
|
||||||
\section{Local opens for patterns}
|
|
||||||
\ikwd{let\@\texttt{let}}
|
|
||||||
\ikwd{open\@\texttt{open}} \label{s:local-opens}
|
|
||||||
|
|
||||||
(Introduced in OCaml 4.04)
|
|
||||||
|
|
||||||
\begin{syntax}
|
|
||||||
pattern:
|
|
||||||
...
|
|
||||||
| module-path '.(' pattern ')'
|
|
||||||
| module-path '.[' pattern ']'
|
|
||||||
| module-path '.[|' pattern '|]'
|
|
||||||
| module-path '.{' pattern '}'
|
|
||||||
|
|
||||||
\end{syntax}
|
|
||||||
|
|
||||||
For patterns, local opens are limited to the
|
|
||||||
@module-path'.('pattern')'@ construction. This
|
|
||||||
construction locally open the module referred to by the module path
|
|
||||||
@module-path@ in the scope of the pattern @pattern@.
|
|
||||||
|
|
||||||
When the body of a local open pattern is delimited by
|
|
||||||
@'[' ']'@, @'[|' '|]'@, or @'{' '}'@, the parentheses can be omitted.
|
|
||||||
For example, @module-path'.['pattern']'@ is equivalent to
|
|
||||||
@module-path'.(['pattern'])'@, and @module-path'.[|' pattern '|]'@ is
|
|
||||||
equivalent to @module-path'.([|' pattern '|])'@.
|
|
||||||
|
|
||||||
\section{Locally abstract types}
|
\section{Locally abstract types}
|
||||||
\ikwd{type\@\texttt{type}}
|
\ikwd{type\@\texttt{type}}
|
||||||
\ikwd{fun\@\texttt{fun}} \label{s:locally-abstract}
|
\ikwd{fun\@\texttt{fun}} \label{s:locally-abstract}
|
||||||
|
|
|
@ -22,9 +22,12 @@ pattern:
|
||||||
| char-literal '..' char-literal
|
| char-literal '..' char-literal
|
||||||
| 'lazy' pattern
|
| 'lazy' pattern
|
||||||
| 'exception' pattern
|
| 'exception' pattern
|
||||||
|
| module-path '.(' pattern ')'
|
||||||
|
| module-path '.[' pattern ']'
|
||||||
|
| module-path '.[|' pattern '|]'
|
||||||
|
| module-path '.{' pattern '}'
|
||||||
\end{syntax}
|
\end{syntax}
|
||||||
See also the following language extensions:
|
See also the following language extensions:
|
||||||
\hyperref[s:local-opens]{local opens},
|
|
||||||
\hyperref[s-first-class-modules]{first-class modules},
|
\hyperref[s-first-class-modules]{first-class modules},
|
||||||
\hyperref[s:attributes]{attributes} and
|
\hyperref[s:attributes]{attributes} and
|
||||||
\hyperref[s:extension-nodes]{extension nodes}.
|
\hyperref[s:extension-nodes]{extension nodes}.
|
||||||
|
@ -225,3 +228,18 @@ call.
|
||||||
A pattern match must contain at least one value case. It is an error if
|
A pattern match must contain at least one value case. It is an error if
|
||||||
all cases are exceptions, because there would be no code to handle
|
all cases are exceptions, because there would be no code to handle
|
||||||
the return of a value.
|
the return of a value.
|
||||||
|
|
||||||
|
\subsubsection*{Local opens for patterns}
|
||||||
|
\ikwd{open\@\texttt{open}} \label{s:local-opens-pattern}
|
||||||
|
(Introduced in OCaml 4.04)
|
||||||
|
|
||||||
|
For patterns, local opens are limited to the
|
||||||
|
@module-path'.('pattern')'@ construction. This
|
||||||
|
construction locally opens the module referred to by the module path
|
||||||
|
@module-path@ in the scope of the pattern @pattern@.
|
||||||
|
|
||||||
|
When the body of a local open pattern is delimited by
|
||||||
|
@'[' ']'@, @'[|' '|]'@, or @'{' '}'@, the parentheses can be omitted.
|
||||||
|
For example, @module-path'.['pattern']'@ is equivalent to
|
||||||
|
@module-path'.(['pattern'])'@, and @module-path'.[|' pattern '|]'@ is
|
||||||
|
equivalent to @module-path'.([|' pattern '|])'@.
|
||||||
|
|
|
@ -99,6 +99,12 @@ becomes
|
||||||
\begin{caml_example}{toplevel}
|
\begin{caml_example}{toplevel}
|
||||||
PrioQueue.[insert empty 1 "hello"];;
|
PrioQueue.[insert empty 1 "hello"];;
|
||||||
\end{caml_example}
|
\end{caml_example}
|
||||||
|
This second form also works for patterns:
|
||||||
|
\begin{caml_example}{toplevel}
|
||||||
|
let at_most_one_element x = match x with
|
||||||
|
| PrioQueue.( Empty| Node (_,_, Empty,Empty) ) -> true
|
||||||
|
| _ -> false ;;
|
||||||
|
\end{caml_example}
|
||||||
|
|
||||||
It is also possible to copy the components of a module inside
|
It is also possible to copy the components of a module inside
|
||||||
another module by using an "include" statement. This can be
|
another module by using an "include" statement. This can be
|
||||||
|
|
Loading…
Reference in New Issue