packages feed

ministg-0.1: test/Prelude.stg

error = ERROR;
unit = CON(Unit);
true = CON(True);
false = CON(False);
nil = CON(Nil);
zero = CON(I 0);
one = CON(I 1);
two = CON(I 2);
three = CON(I 3);
four = CON(I 4);
five = CON(I 5);
six = CON(I 6);
seven = CON(I 7);
eight = CON(I 8);
nine = CON(I 9);
ten = CON(I 10);

multInt = FUN(x y ->
   case x of { 
      I i -> case y of { 
               I j -> case mult# i j of { 
                         x -> let { result = CON (I x) } in result }}});

plusInt = FUN(x y ->
   case x of { 
      I i -> case y of { 
               I j -> case plus# i j of { 
                         x -> let { result = CON (I x) } in result }}});

subInt = FUN(x y ->
           case x of
              { I i ->
                  case y of
                     { I j -> case sub# i j of
                                 { x -> let { result = CON (I x) } in result }}});

eqInt = FUN(x y ->
           case x of
              { I i ->
                  case y of
                     { I j -> case eq# i j of
                                 { x -> intToBool# x }}});

append = FUN(l1 l2 ->
            case l1 of
               { Nil -> l2;
                 Cons hd tl -> let { rec = THUNK(append tl l2);
                                     result = CON(Cons hd rec) }
                               in result });

const = FUN(x y -> x);
apply = FUN(f x -> f x);

map = FUN(f list ->
   case list of {
      Nil -> nil;
      Cons h t -> let { x = THUNK(f h); rec = THUNK(map f t); res = CON(Cons x rec) } in res
   });

take = FUN(n xs ->
   case eqInt n zero of
      { True -> nil;
        False -> case xs of
                 { Nil -> nil;
                   Cons hd tl -> let { m = THUNK(subInt n one);
                                       rec = THUNK(take m tl);
                                       result = CON(Cons hd rec) } in result }});

head = FUN(xs -> case xs of { Cons hd tl -> hd });
tail = FUN(xs -> case xs of { Cons hd tl -> tl });

foldl = FUN(f acc list ->
   case list of {
      Nil -> acc;
      Cons h t -> let { newAcc = THUNK(f acc h) } in foldl f newAcc t 
   });

# lazy sum with a well-known space leak
sum = FUN(list -> foldl plusInt zero list);

zipWith = FUN(f list1 list2 ->
   case list1 of {
      Nil -> nil;
      Cons h1 t1 -> 
         case list2 of {
            Nil -> nil;
            Cons h2 t2 ->
               let { newHead = THUNK(f h1 h2); 
                     newTail = THUNK(zipWith f t1 t2);
                     result = CON(Cons newHead newTail)
               } in result
         }
   });

seq = FUN(x y -> case x of { z -> y });

forcelist = FUN(list ->
   case list of {
      Nil -> unit;
      Cons h t -> let { rec = THUNK(forcelist t) } in seq h rec });