module Stg.Prelude (
maybe,
nothing,
nil,
concat2,
reverse,
foldl,
foldl',
foldr,
iterate,
cycle,
take,
filter,
partition,
repeat,
replicate,
sort,
naiveSort,
map,
length,
zip,
zipWith,
forceSpine,
equals_List_Int,
fst,
snd,
curry,
uncurry,
swap,
equals_Pair_Int,
and2,
or2,
not,
bool,
eq_Bool,
add,
sub,
mul,
div,
mod,
eq_Int,
lt_Int,
leq_Int,
gt_Int,
geq_Int,
neq_Int,
min,
max,
seq,
id,
const,
compose,
fix,
force,
) where
import Prelude ()
import Stg.Language
import Stg.Parser.QuasiQuoter
import Stg.Prelude.Bool
import Stg.Prelude.Function
import Stg.Prelude.List
import Stg.Prelude.Maybe
import Stg.Prelude.Number
import Stg.Prelude.Tuple
force :: Program
force = [stg|
force = \ =>
letrec
go0 = \ -> Done;
go1 = \(go go0) x -> case go x of default -> go0;
go2 = \(go go1) x y -> case go x of default -> go1 y;
go3 = \(go go2) x y z -> case go x of default -> go2 y z;
go = \(go0 go1 go2 go3) x -> case x of
Unit -> go0;
Nothing -> go0;
Just x -> go1 x;
True -> go0;
False -> go0;
Int# _ -> go0;
Left l -> go1 l;
Right r -> go1 r;
Pair x y -> go2 x y;
Triple x y z -> go3 x y z;
Nil -> go0;
Cons x xs -> go2 x xs;
x -> Error_ForceNotImplementedFor x;
forceAndReturnValue = \(go) x -> case go x of default -> x
in forceAndReturnValue |]