summaryrefslogtreecommitdiff
path: root/compiler/prelude/primops.txt.pp
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/prelude/primops.txt.pp')
-rw-r--r--compiler/prelude/primops.txt.pp15
1 files changed, 15 insertions, 0 deletions
diff --git a/compiler/prelude/primops.txt.pp b/compiler/prelude/primops.txt.pp
index ce2462c99f..49498466e3 100644
--- a/compiler/prelude/primops.txt.pp
+++ b/compiler/prelude/primops.txt.pp
@@ -1650,6 +1650,21 @@ primop ParOp "par#" GenPrimOp
has_side_effects = True
code_size = { primOpCodeSizeForeignCall }
+primop SparkOp "spark#" GenPrimOp
+ a -> State# s -> (# State# s, a #)
+ with has_side_effects = True
+ code_size = { primOpCodeSizeForeignCall }
+
+primop SeqOp "seq#" GenPrimOp
+ a -> State# s -> (# State# s, a #)
+
+ -- why return the value? So that we can control sharing of seq'd
+ -- values: in
+ -- let x = e in x `seq` ... x ...
+ -- we don't want to inline x, so better to represent it as
+ -- let x = e in case seq# x RW of (# _, x' #) -> ... x' ...
+ -- also it matches the type of rseq in the Eval monad.
+
primop GetSparkOp "getSpark#" GenPrimOp
State# s -> (# State# s, Int#, a #)
with