X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fprelude%2Fprimops.txt.pp;h=1d46095d4d626022acf3542de6d8f51af9cc1dd4;hb=bb7d80b3b8d1396d481d3b24302bee24a3d92f71;hp=10bcf37c10d666d984df271afb8934b1a04d2dee;hpb=b511a8e82047c37834d2d4e116199511eb6fd70b;p=ghc-hetmet.git diff --git a/compiler/prelude/primops.txt.pp b/compiler/prelude/primops.txt.pp index 10bcf37..1d46095 100644 --- a/compiler/prelude/primops.txt.pp +++ b/compiler/prelude/primops.txt.pp @@ -1473,7 +1473,7 @@ section "Concurrency primitives" ------------------------------------------------------------------------ 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}, where s is a type variable. The only purpose of the type parameter is to keep different state threads separate. It is represented by @@ -1482,7 +1482,7 @@ primtype State# s primtype RealWorld { {\tt RealWorld} is deeply magical. It is {\it primitive}, but it is not {\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# {(In a non-concurrent implementation, this can be a singleton @@ -1532,6 +1532,11 @@ primop IsCurrentThreadBoundOp "isCurrentThreadBound#" GenPrimOp with out_of_line = True +primop NoDuplicateOp "noDuplicate#" GenPrimOp + State# RealWorld -> State# RealWorld + with + out_of_line = True + ------------------------------------------------------------------------ section "Weak pointers" ------------------------------------------------------------------------ @@ -1733,13 +1738,8 @@ primop NewBCOOp "newBCO#" GenPrimOp has_side_effects = True out_of_line = True -primop InfoPtrOp "infoPtr#" GenPrimOp - a -> Addr# - with - out_of_line = True - -primop ClosurePayloadOp "closurePayload#" GenPrimOp - a -> (# Array# b, ByteArr# #) +primop UnpackClosureOp "unpackClosure#" GenPrimOp + a -> (# Addr#, Array# b, ByteArr# #) with out_of_line = True @@ -1787,8 +1787,9 @@ pseudoop "lazy" This behaviour is occasionally useful when controlling evaluation order. Notably, {\tt lazy} is used in the library definition of {\tt Control.Parallel.par}: - > par :: a -> b -> b - > par x y = case (par# x) of { _ -> lazy y } + {\tt par :: a -> b -> b} + + {\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 would defeat the whole purpose of {\tt par}. @@ -1808,7 +1809,7 @@ primtype Any a It's also used to instantiate un-constrained type variables after type checking. For example - > length Any [] + {\tt length Any []} 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,