Commit 4578f100 authored by sven.panne@aedion.de's avatar sven.panne@aedion.de
Browse files

Fixed LaTeX markup

parent 7f3ce06a
...@@ -1473,7 +1473,7 @@ section "Concurrency primitives" ...@@ -1473,7 +1473,7 @@ section "Concurrency primitives"
------------------------------------------------------------------------ ------------------------------------------------------------------------
primtype State# s primtype State# s
{ {\tt State#} is the primitive, unlifted type of states. It has { {\tt State\#} is the primitive, unlifted type of states. It has
one type parameter, thus {\tt State\# RealWorld}, or {\tt State\# s}, one type parameter, thus {\tt State\# RealWorld}, or {\tt State\# s},
where s is a type variable. The only purpose of the type parameter where s is a type variable. The only purpose of the type parameter
is to keep different state threads separate. It is represented by is to keep different state threads separate. It is represented by
...@@ -1482,7 +1482,7 @@ primtype State# s ...@@ -1482,7 +1482,7 @@ primtype State# s
primtype RealWorld primtype RealWorld
{ {\tt RealWorld} is deeply magical. It is {\it primitive}, but it is not { {\tt RealWorld} is deeply magical. It is {\it primitive}, but it is not
{\it unlifted} (hence {\tt ptrArg}). We never manipulate values of type {\it unlifted} (hence {\tt ptrArg}). We never manipulate values of type
{\tt RealWorld}; it's only used in the type system, to parameterise {\tt State#}. } {\tt RealWorld}; it's only used in the type system, to parameterise {\tt State\#}. }
primtype ThreadId# primtype ThreadId#
{(In a non-concurrent implementation, this can be a singleton {(In a non-concurrent implementation, this can be a singleton
...@@ -1792,8 +1792,9 @@ pseudoop "lazy" ...@@ -1792,8 +1792,9 @@ pseudoop "lazy"
This behaviour is occasionally useful when controlling evaluation order. This behaviour is occasionally useful when controlling evaluation order.
Notably, {\tt lazy} is used in the library definition of {\tt Control.Parallel.par}: Notably, {\tt lazy} is used in the library definition of {\tt Control.Parallel.par}:
> par :: a -> b -> b {\tt par :: a -> b -> b}
> par x y = case (par# x) of { _ -> lazy y }
{\tt par x y = case (par\# x) of \{ \_ -> lazy y \}}
If {\tt lazy} were not lazy, {\tt par} would look strict in {\tt y} which If {\tt lazy} were not lazy, {\tt par} would look strict in {\tt y} which
would defeat the whole purpose of {\tt par}. would defeat the whole purpose of {\tt par}.
...@@ -1813,7 +1814,7 @@ primtype Any a ...@@ -1813,7 +1814,7 @@ primtype Any a
It's also used to instantiate un-constrained type variables after type It's also used to instantiate un-constrained type variables after type
checking. For example checking. For example
> length Any [] {\tt length Any []}
Annoyingly, we sometimes need {\tt Any}s of other kinds, such as {\tt (* -> *)} etc. Annoyingly, we sometimes need {\tt Any}s of other kinds, such as {\tt (* -> *)} etc.
This is a bit like tuples. We define a couple of useful ones here, This is a bit like tuples. We define a couple of useful ones here,
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment