diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,13 @@
 # fast-arithmetic
 
+## 0.6.2.0
+
+  * Add `radical` for computing radicals of integers
+
+## 0.6.1.2
+
+  * Add `fast_arithmetic.h` for those wanting to use the C library.
+
 ## 0.6.1.1
   
   * Add niche function for a problem of combinatorial geometry.
diff --git a/ats-src/bench.dats b/ats-src/bench.dats
--- a/ats-src/bench.dats
+++ b/ats-src/bench.dats
@@ -44,6 +44,10 @@
 
 implement main0 () =
   {
+    // FIXME - for some reason this is negative
+    // val k = max_regions(46342) 
+    // val () = println!(k)
+    // val () = intinf_free(k)
     val () = print_slope("factorial", 12, factorial_delay)
     val () = print_slope("double factorial", 12, double_factorial_delay)
     val () = print_slope("choose", 13, choose_delay)
diff --git a/ats-src/combinatorics.dats b/ats-src/combinatorics.dats
--- a/ats-src/combinatorics.dats
+++ b/ats-src/combinatorics.dats
@@ -150,11 +150,10 @@
 // TODO stirling numbers of the second kind.
 // Bell numbers. These can't be called via the FFI because of the mutually
 // recursive functions, so we should probably think of something else.
-fun bell {n:nat}(n : int(n)) : intinfGt(0) =
+fnx bell {n:nat}(n : int(n)) : intinfGt(0) =
   case- n of
     | 0 => int2intinf(1)
     | n when n >= 0 =>> sum_loop(n, n)
-
 and sum_loop {n:nat}{ m : nat | m >= 1 && m <= n } .<m>. (n : int(n), i : int(m)) : intinfGt(0) =
   case+ i of
     | 1 => int2intinf(1)
diff --git a/ats-src/combinatorics.sats b/ats-src/combinatorics.sats
--- a/ats-src/combinatorics.sats
+++ b/ats-src/combinatorics.sats
@@ -1,22 +1,22 @@
 staload "$PATSHOMELOCS/atscntrb-hx-intinf/SATS/intinf_vt.sats"
 
 fun choose_ats {n:nat}{ m : nat | m <= n } : (int(n), int(m)) -> Intinf =
-  "mac#"
+  "ext#"
 
 fun double_factorial_ats {n:nat} : int(n) -> Intinf =
-  "mac#"
+  "ext#"
 
 fun factorial_ats {n:nat} : int(n) -> Intinf =
-  "mac#"
+  "ext#"
 
 fun catalan_ats {n:nat} : int(n) -> Intinf =
-  "mac#"
+  "ext#"
 
 fun derangements_ats {n:nat} : int(n) -> Intinf =
-  "mac#"
+  "ext#"
 
 fun permutations_ats {n:nat}{ k : nat | k <= n && k > 0 } : (int(n), int(k)) -> Intinf =
-  "mac#"
+  "ext#"
 
 fun max_regions_ats {n:nat} : int(n) -> Intinf =
-  "mac#"
+  "ext#"
diff --git a/ats-src/number-theory.dats b/ats-src/number-theory.dats
--- a/ats-src/number-theory.dats
+++ b/ats-src/number-theory.dats
@@ -245,6 +245,21 @@
     loop(n, 1)
   end
 
+// radical of an integer: https://oeis.org/A007947
+fn radical(n : intGte(1)) : int =
+  case+ n of
+    | 1 => 1
+    | n =>> let
+      var x: stream_vt(int) = prime_factors(n)
+      
+      fun product(ys : stream_vt(int)) : int =
+        case+ !ys of
+          | ~stream_vt_cons (z, zs) => z * product(zs)
+          | ~stream_vt_nil() => 1
+    in
+      product(x)
+    end
+
 // Euler's totient function.
 fn totient(n : intGte(1)) : int =
   case+ n of
@@ -278,6 +293,9 @@
   in
     loop(1, n)
   end
+
+implement radical_ats (n) =
+  radical(n)
 
 implement sum_divisors_ats (m) =
   sum_divisors(m)
diff --git a/ats-src/number-theory.sats b/ats-src/number-theory.sats
--- a/ats-src/number-theory.sats
+++ b/ats-src/number-theory.sats
@@ -1,26 +1,29 @@
 staload "$PATSHOMELOCS/atscntrb-hx-intinf/SATS/intinf_vt.sats"
 staload "ats-src/numerics.sats"
 
+fun radical_ats { k : nat | k >= 1 }(int(k)) : int =
+  "ext#"
+
 fun totient_ats { k : nat | k >= 2 }(int(k)) : int =
-  "mac#"
+  "ext#"
 
 fun count_divisors_ats { k : nat | k >= 2 }(int(k)) : int =
-  "mac#"
+  "ext#"
 
 fun little_omega_ats { n : nat | n > 0 } : int(n) -> int =
-  "mac#"
+  "ext#"
 
 fun sum_divisors_ats : { n : nat | n > 1 } int(n) -> int =
-  "mac#"
+  "ext#"
 
 fun jacobi_ats : (intGte(0), Odd) -> int =
-  "mac#"
+  "ext#"
 
 fun is_perfect_ats : intGt(1) -> bool =
-  "mac#"
+  "ext#"
 
 fun totient_sum_ats : intGte(1) -> Intinf =
-  "mac#"
+  "ext#"
 
 fun coprime_ats {k:nat}{n:nat} : (int(k), int(n)) -> bool =
-  "mac#"
+  "ext#"
diff --git a/ats-src/numerics.dats b/ats-src/numerics.dats
--- a/ats-src/numerics.dats
+++ b/ats-src/numerics.dats
@@ -7,9 +7,11 @@
 staload "ats-src/numerics.sats"
 
 %{^
-#define ATS_MEMALLOC_LIBC
+#ifndef LIBRARY_BUILD
+#define ATS_MEMALLOC_LIBC *)
 #include "ccomp/runtime/pats_ccomp_memalloc_libc.h"
 #include "ccomp/runtime/pats_ccomp_runtime_memalloc.c"
+#endif
 %}
 
 implement is_prime_ats (n) =
diff --git a/ats-src/numerics.sats b/ats-src/numerics.sats
--- a/ats-src/numerics.sats
+++ b/ats-src/numerics.sats
@@ -13,7 +13,7 @@
 castfn witness(n : int) :<> [m:nat] int(m)
 
 fun is_prime_ats { n : nat | n > 0 } : int(n) -> bool =
-  "mac#"
+  "ext#"
 
 fun exp_ats {m:nat} : ([n:nat] int(n), int(m)) -> int =
-  "mac#"
+  "ext#"
diff --git a/atspkg.dhall b/atspkg.dhall
--- a/atspkg.dhall
+++ b/atspkg.dhall
@@ -30,7 +30,7 @@
 in
 
 {- Main -}
-λ(cfg : { sourceBld : Bool, withBench : Bool, icc : Bool }) →
+λ(cfg : { sourceBld : Bool, withBench : Bool }) →
 
     let test = if cfg.withBench
     then
@@ -78,10 +78,7 @@
             else [ "-DLIBRARY_BUILD" ]
     in
 
-    let cc =
-        if cfg.icc
-            then prelude.icc
-            else prelude.cc
+    let cc = prelude.cc
     in
 
     prelude.default ⫽
@@ -97,5 +94,6 @@
                 , maintainer = "Vanessa McHale <vamchale@gmail.com>"
                 , description = "Library for fast arithmetic in ATS"
                 , libraries = [ "${prelude.atsProject}/libnumbertheory.a" ]
+                , headers = [ "include/fast_arithmetic.h" ]
                 })
         }
diff --git a/bench.dhall b/bench.dhall
--- a/bench.dhall
+++ b/bench.dhall
@@ -1,2 +1,1 @@
-λ(icc : Bool) →
-    { sourceBld = True, withBench = True, icc = icc }
+{ sourceBld = True, withBench = True }
diff --git a/bench/Bench.hs b/bench/Bench.hs
--- a/bench/Bench.hs
+++ b/bench/Bench.hs
@@ -14,6 +14,9 @@
 hsIsPrime x = all ((/=0) . (x `rem`)) [2..up]
     where up = floor (sqrt (fromIntegral x :: Float))
 
+hsMaxRegions :: Int -> Integer
+hsMaxRegions n = sum $ fmap (n `choose`) [0..4]
+
 main :: IO ()
 main =
     defaultMain [ bgroup "primality check"
@@ -55,5 +58,9 @@
                 , bgroup "permutations"
                       [ bench "permutations" $ nf (permutations 10) 20
                       , bench "hsPermutations" $ nf (hsPermutations 10) (20 :: Integer)
+                      ]
+                , bgroup "maxRegions"
+                      [ bench "maxRegions" $ nf maxRegions 45000
+                      , bench "hsMaxRegions" $ nf hsMaxRegions 45000
                       ]
                 ]
diff --git a/cbits/combinatorics.c b/cbits/combinatorics.c
--- a/cbits/combinatorics.c
+++ b/cbits/combinatorics.c
@@ -718,10 +718,6 @@
 
 ATSstatic()
 atstkind_type(atstype_ptrk)
-sum_loop_80(atstkind_t0ype(atstype_int), atstkind_t0ype(atstype_int)) ;
-
-ATSstatic()
-atstkind_type(atstype_ptrk)
 ATSCNTRB_056_HX_056_intinf_vt__intinf_make_int__15__19(atstkind_t0ype(atstype_int)) ;
 
 ATSstatic()
@@ -5597,9 +5593,28 @@
 bell_79(atstkind_t0ype(atstype_int) arg0)
 {
 /* tmpvardeclst(beg) */
+ATStmpdec(apy0, atstkind_t0ype(atstype_int)) ;
 ATStmpdec(tmpret193, atstkind_type(atstype_ptrk)) ;
 ATStmpdec(tmp198, atstkind_t0ype(atstype_bool)) ;
 /* tmpvardeclst(end) */
+/*
+emit_funent_fnxdeclst:
+*/
+ATStmpdec(a2rg0, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(a2rg1, atstkind_t0ype(atstype_int)) ;
+/* tmpvardeclst(beg) */
+ATStmpdec(a2py0, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(a2py1, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmpret203, atstkind_type(atstype_ptrk)) ;
+ATStmpdec(tmpref208, atstkind_type(atstype_ptrk)) ;
+ATStmpdec(tmp209, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmpref210, atstkind_type(atstype_ptrk)) ;
+ATStmpdec(tmpref211, atstkind_type(atstype_ptrk)) ;
+ATStmpdec(tmpref212, atstkind_type(atstype_ptrk)) ;
+ATStmpdec(tmpref217, atstkind_type(atstype_ptrk)) ;
+// ATStmpdec_void(tmp220) ;
+// ATStmpdec_void(tmp223) ;
+/* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
 emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4347(line=153, offs=5) -- 4464(line=156, offs=39)
@@ -5667,7 +5682,13 @@
 /*
 emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4450(line=156, offs=25) -- 4464(line=156, offs=39)
 */
-ATSINSmove(tmpret193, sum_loop_80(arg0, arg0)) ;
+ATStailcal_beg()
+ATSINSmove_tlcal(a2py0, arg0) ;
+ATSINSmove_tlcal(a2py1, arg0) ;
+ATSINSargmove_tlcal(a2rg0, a2py0) ;
+ATSINSargmove_tlcal(a2rg1, a2py1) ;
+ATSINSfgoto(__patsflab_sum_loop_80) ;
+ATStailcal_end()
 
 ATSbranch_end()
 
@@ -5678,39 +5699,16 @@
 
 ATSfunbody_end()
 ATSreturn(tmpret193) ;
-} /* end of [bell_79] */
-
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4470(line=158, offs=5) -- 4891(line=171, offs=8)
-*/
-/*
-local: choose_62$0(level=0), bell_79$0(level=0), sum_loop_80$0(level=0)
-global: fact_ref_28$0(level=0), fact_34$0(level=0), choose_62$0(level=0), bell_79$0(level=0), sum_loop_80$0(level=0)
-local: 
-global: 
+emit_funent_fnxbodylst:
 */
-ATSstatic()
-atstkind_type(atstype_ptrk)
-sum_loop_80(atstkind_t0ype(atstype_int) arg0, atstkind_t0ype(atstype_int) arg1)
-{
-/* tmpvardeclst(beg) */
-ATStmpdec(tmpret203, atstkind_type(atstype_ptrk)) ;
-ATStmpdec(tmpref208, atstkind_type(atstype_ptrk)) ;
-ATStmpdec(tmp209, atstkind_t0ype(atstype_int)) ;
-ATStmpdec(tmpref210, atstkind_type(atstype_ptrk)) ;
-ATStmpdec(tmpref211, atstkind_type(atstype_ptrk)) ;
-ATStmpdec(tmpref212, atstkind_type(atstype_ptrk)) ;
-ATStmpdec(tmpref217, atstkind_type(atstype_ptrk)) ;
-// ATStmpdec_void(tmp220) ;
-// ATStmpdec_void(tmp223) ;
-/* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4470(line=158, offs=5) -- 4891(line=171, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4469(line=157, offs=5) -- 4890(line=170, offs=8)
 */
 ATSINSflab(__patsflab_sum_loop_80):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4566(line=159, offs=3) -- 4891(line=171, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4565(line=158, offs=3) -- 4890(line=170, offs=8)
 */
 ATScaseof_beg()
 /*
@@ -5718,15 +5716,15 @@
 */
 ATSbranch_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4583(line=160, offs=7) -- 4584(line=160, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4582(line=159, offs=7) -- 4583(line=159, offs=8)
 */
 ATSINSlab(__atstmplab39):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4536(line=158, offs=71) -- 4537(line=158, offs=72)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4535(line=157, offs=71) -- 4536(line=157, offs=72)
 */
-ATSifnthen(ATSCKpat_int(arg1, ATSPMVint(1))) { ATSINSgoto(__atstmplab41) ; } ;
+ATSifnthen(ATSCKpat_int(a2rg1, ATSPMVint(1))) { ATSINSgoto(__atstmplab41) ; } ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4584(line=160, offs=8) -- 4584(line=160, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4583(line=159, offs=8) -- 4583(line=159, offs=8)
 */
 ATSINSlab(__atstmplab40):
 /*
@@ -5736,7 +5734,7 @@
 ibranch-mbody:
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4588(line=160, offs=12) -- 4601(line=160, offs=25)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4587(line=159, offs=12) -- 4600(line=159, offs=25)
 */
 ATSINSmove(tmpret203, ATSCNTRB_056_HX_056_intinf_vt__intinf_make_int__15__20(ATSPMVi0nt(1))) ;
 
@@ -5744,7 +5742,7 @@
 
 ATSbranch_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4609(line=161, offs=8) -- 4609(line=161, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4608(line=160, offs=8) -- 4608(line=160, offs=8)
 */
 ATSINSlab(__atstmplab41):
 /*
@@ -5754,78 +5752,78 @@
 ibranch-mbody:
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4614(line=161, offs=13) -- 4891(line=171, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4613(line=160, offs=13) -- 4890(line=170, offs=8)
 */
 /*
 letpush(beg)
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4628(line=162, offs=11) -- 4629(line=162, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4627(line=161, offs=11) -- 4628(line=161, offs=12)
 */
 /*
 ATSINStmpdec(tmpref208) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4644(line=162, offs=27) -- 4649(line=162, offs=32)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4643(line=161, offs=27) -- 4648(line=161, offs=32)
 */
-ATSINSmove(tmp209, atspre_g1int_sub_int(arg1, ATSPMVi0nt(1))) ;
+ATSINSmove(tmp209, atspre_g1int_sub_int(a2rg1, ATSPMVi0nt(1))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4632(line=162, offs=15) -- 4650(line=162, offs=33)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4631(line=161, offs=15) -- 4649(line=161, offs=33)
 */
-ATSINSmove(tmpref208, sum_loop_80(arg0, tmp209)) ;
+ATSINSmove(tmpref208, sum_loop_80(a2rg0, tmp209)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4661(line=163, offs=11) -- 4662(line=163, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4660(line=162, offs=11) -- 4661(line=162, offs=12)
 */
 /*
 ATSINStmpdec(tmpref210) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4665(line=163, offs=15) -- 4671(line=163, offs=21)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4664(line=162, offs=15) -- 4670(line=162, offs=21)
 */
-ATSINSmove(tmpref210, bell_79(arg1)) ;
+ATSINSmove(tmpref210, bell_79(a2rg1)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4683(line=164, offs=11) -- 4684(line=164, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4682(line=163, offs=11) -- 4683(line=163, offs=12)
 */
 /*
 ATSINStmpdec(tmpref211) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4687(line=164, offs=15) -- 4699(line=164, offs=27)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4686(line=163, offs=15) -- 4698(line=163, offs=27)
 */
-ATSINSmove(tmpref211, choose_62(arg0, arg1)) ;
+ATSINSmove(tmpref211, choose_62(a2rg0, a2rg1)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4710(line=165, offs=11) -- 4717(line=165, offs=18)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4709(line=164, offs=11) -- 4716(line=164, offs=18)
 */
 /*
 ATSINStmpdec(tmpref212) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4720(line=165, offs=21) -- 4745(line=165, offs=46)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4719(line=164, offs=21) -- 4744(line=164, offs=46)
 */
 ATSINSmove(tmpref212, ATSCNTRB_056_HX_056_intinf_vt__mul_intinf0_intinf1__88__1(tmpref211, ATSPMVrefarg0(tmpref210))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4756(line=166, offs=11) -- 4759(line=166, offs=14)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4755(line=165, offs=11) -- 4758(line=165, offs=14)
 */
 /*
 ATSINStmpdec(tmpref217) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4762(line=166, offs=17) -- 4793(line=166, offs=48)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4761(line=165, offs=17) -- 4792(line=165, offs=48)
 */
 ATSINSmove(tmpref217, ATSCNTRB_056_HX_056_intinf_vt__add_intinf0_intinf1__6__3(tmpref212, ATSPMVrefarg0(tmpref208))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4808(line=167, offs=15) -- 4821(line=167, offs=28)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4807(line=166, offs=15) -- 4820(line=166, offs=28)
 */
 ATSINSmove_void(tmp220, ATSCNTRB_056_HX_056_intinf_vt__intinf_free__12__4(tmpref210)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4837(line=168, offs=15) -- 4850(line=168, offs=28)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4836(line=167, offs=15) -- 4849(line=167, offs=28)
 */
 ATSINSmove_void(tmp223, ATSCNTRB_056_HX_056_intinf_vt__intinf_free__12__5(tmpref208)) ;
 
@@ -5834,11 +5832,11 @@
 */
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4865(line=170, offs=7) -- 4882(line=170, offs=24)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4864(line=169, offs=7) -- 4881(line=169, offs=24)
 */
 ATSINSmove(tmpret203, ATSPMVcastfn(castvwtp0, atstkind_type(atstype_ptrk), tmpref217)) ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4614(line=161, offs=13) -- 4891(line=171, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4613(line=160, offs=13) -- 4890(line=170, offs=8)
 */
 /*
 INSletpop()
@@ -5852,7 +5850,7 @@
 
 ATSfunbody_end()
 ATSreturn(tmpret203) ;
-} /* end of [sum_loop_80] */
+} /* end of [bell_79] */
 
 /*
 /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/.atspkg/contrib/atscntrb-hx-intinf/DATS/intinf_vt.dats: 2209(line=74, offs=3) -- 2301(line=80, offs=2)
@@ -6419,7 +6417,7 @@
 } /* end of [ATSCNTRB_056_HX_056_intinf_vt__intinf_free__12__5] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4896(line=173, offs=4) -- 5325(line=190, offs=6)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4895(line=172, offs=4) -- 5324(line=189, offs=6)
 */
 /*
 local: choose_62$0(level=0)
@@ -6438,23 +6436,23 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4896(line=173, offs=4) -- 5325(line=190, offs=6)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4895(line=172, offs=4) -- 5324(line=189, offs=6)
 */
 ATSINSflab(__patsflab_max_regions_93):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4941(line=174, offs=3) -- 5325(line=190, offs=6)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4940(line=173, offs=3) -- 5324(line=189, offs=6)
 */
 /*
 letpush(beg)
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5275(line=186, offs=9) -- 5276(line=186, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5274(line=185, offs=9) -- 5275(line=185, offs=10)
 */
 /*
 ATSINStmpdec(tmpref246) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5298(line=187, offs=14) -- 5308(line=187, offs=24)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5297(line=186, offs=14) -- 5307(line=186, offs=24)
 */
 ATSINSmove_void(tmp247, loop_94(arg0, ATSPMVi0nt(4), ATSPMVrefarg1(ATSPMVptrof(tmpref246)))) ;
 
@@ -6463,11 +6461,11 @@
 */
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5318(line=189, offs=5) -- 5319(line=189, offs=6)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5317(line=188, offs=5) -- 5318(line=188, offs=6)
 */
 ATSINSmove(tmpret226, tmpref246) ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4941(line=174, offs=3) -- 5325(line=190, offs=6)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4940(line=173, offs=3) -- 5324(line=189, offs=6)
 */
 /*
 INSletpop()
@@ -6477,7 +6475,7 @@
 } /* end of [max_regions_93] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4953(line=175, offs=9) -- 5261(line=184, offs=15)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4952(line=174, offs=9) -- 5260(line=183, offs=15)
 */
 /*
 local: choose_62$0(level=0), loop_94$0(level=1)
@@ -6500,68 +6498,68 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4953(line=175, offs=9) -- 5261(line=184, offs=15)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4952(line=174, offs=9) -- 5260(line=183, offs=15)
 */
 ATSINSflab(__patsflab_loop_94):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5029(line=176, offs=10) -- 5034(line=176, offs=15)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5028(line=175, offs=10) -- 5033(line=175, offs=15)
 */
 ATSINSmove(tmp228, ATSLIB_056_prelude__eq_g1int_int__95__1(arg0, ATSPMVi0nt(0))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5026(line=176, offs=7) -- 5261(line=184, offs=15)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5025(line=175, offs=7) -- 5260(line=183, offs=15)
 */
 ATSif(
 tmp228
 ) ATSthen() {
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5055(line=177, offs=16) -- 5068(line=177, offs=29)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5054(line=176, offs=16) -- 5067(line=176, offs=29)
 */
 ATSINSmove(tmp233, ATSCNTRB_056_HX_056_intinf_vt__intinf_make_int__15__21(ATSPMVi0nt(1))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5048(line=177, offs=9) -- 5068(line=177, offs=29)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5047(line=176, offs=9) -- 5067(line=176, offs=29)
 */
 ATSINSstore(ATSderef(arg1, atstkind_type(atstype_ptrk)), tmp233) ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5048(line=177, offs=9) -- 5068(line=177, offs=29)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5047(line=176, offs=9) -- 5067(line=176, offs=29)
 */
 ATSINSmove_void(tmpret227, ATSPMVempty()) ;
 } ATSelse() {
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5088(line=179, offs=9) -- 5261(line=184, offs=15)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5087(line=178, offs=9) -- 5260(line=183, offs=15)
 */
 /*
 letpush(beg)
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5116(line=180, offs=25) -- 5121(line=180, offs=30)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5115(line=179, offs=25) -- 5120(line=179, offs=30)
 */
 ATSINSmove(tmp239, atspre_g1int_sub_int(arg0, ATSPMVi0nt(1))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5111(line=180, offs=20) -- 5127(line=180, offs=36)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5110(line=179, offs=20) -- 5126(line=179, offs=36)
 */
 ATSINSmove_void(tmp238, loop_94(env0, tmp239, ATSPMVrefarg1(arg1))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5142(line=181, offs=15) -- 5143(line=181, offs=16)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5141(line=180, offs=15) -- 5142(line=180, offs=16)
 */
 /*
 ATSINStmpdec(tmpref240) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5146(line=181, offs=19) -- 5158(line=181, offs=31)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5145(line=180, offs=19) -- 5157(line=180, offs=31)
 */
 ATSINSmove(tmpref240, choose_62(env0, arg0)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5185(line=182, offs=27) -- 5212(line=182, offs=54)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5184(line=181, offs=27) -- 5211(line=181, offs=54)
 */
 ATSINSmove(tmp241, ATSCNTRB_056_HX_056_intinf_vt__add_intinf0_intinf1__6__4(ATSderef(arg1, atstkind_type(atstype_ptrk)), ATSPMVrefarg0(tmpref240))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5178(line=182, offs=20) -- 5212(line=182, offs=54)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5177(line=181, offs=20) -- 5211(line=181, offs=54)
 */
 ATSINSstore(ATSderef(arg1, atstkind_type(atstype_ptrk)), tmp241) ;
 /*
@@ -6569,12 +6567,12 @@
 */
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5232(line=183, offs=20) -- 5245(line=183, offs=33)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5231(line=182, offs=20) -- 5244(line=182, offs=33)
 */
 ATSINSmove_void(tmpret227, ATSCNTRB_056_HX_056_intinf_vt__intinf_free__12__6(tmpref240)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5088(line=179, offs=9) -- 5261(line=184, offs=15)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5087(line=178, offs=9) -- 5260(line=183, offs=15)
 */
 /*
 INSletpop()
@@ -6880,7 +6878,7 @@
 } /* end of [ATSCNTRB_056_HX_056_intinf_vt__intinf_free__12__6] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5348(line=192, offs=22) -- 5371(line=193, offs=15)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5347(line=191, offs=22) -- 5370(line=192, offs=15)
 */
 /*
 local: choose_62$0(level=0)
@@ -6897,11 +6895,11 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5337(line=192, offs=11) -- 5371(line=193, offs=15)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5336(line=191, offs=11) -- 5370(line=192, offs=15)
 */
 ATSINSflab(__patsflab_choose_ats):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5359(line=193, offs=3) -- 5371(line=193, offs=15)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5358(line=192, offs=3) -- 5370(line=192, offs=15)
 */
 ATSINSmove(tmpret248, choose_62(arg0, arg1)) ;
 
@@ -6910,7 +6908,7 @@
 } /* end of [choose_ats] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5404(line=195, offs=32) -- 5419(line=196, offs=10)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5403(line=194, offs=32) -- 5418(line=195, offs=10)
 */
 /*
 local: dfact_41$0(level=0)
@@ -6927,11 +6925,11 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5383(line=195, offs=11) -- 5420(line=196, offs=11)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5382(line=194, offs=11) -- 5419(line=195, offs=11)
 */
 ATSINSflab(__patsflab_double_factorial_ats):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5412(line=196, offs=3) -- 5419(line=196, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5411(line=195, offs=3) -- 5418(line=195, offs=10)
 */
 ATSINSmove(tmpret249, dfact_41(arg0)) ;
 
@@ -6940,7 +6938,7 @@
 } /* end of [double_factorial_ats] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5446(line=198, offs=25) -- 5460(line=199, offs=9)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5445(line=197, offs=25) -- 5459(line=198, offs=9)
 */
 /*
 local: fact_34$0(level=0)
@@ -6957,11 +6955,11 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5432(line=198, offs=11) -- 5461(line=199, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5431(line=197, offs=11) -- 5460(line=198, offs=10)
 */
 ATSINSflab(__patsflab_factorial_ats):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5454(line=199, offs=3) -- 5460(line=199, offs=9)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5453(line=198, offs=3) -- 5459(line=198, offs=9)
 */
 ATSINSmove(tmpret250, fact_34(arg0)) ;
 
@@ -6970,7 +6968,7 @@
 } /* end of [factorial_ats] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5485(line=201, offs=23) -- 5502(line=202, offs=12)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5484(line=200, offs=23) -- 5501(line=201, offs=12)
 */
 /*
 local: catalan_50$0(level=0)
@@ -6987,11 +6985,11 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5473(line=201, offs=11) -- 5503(line=202, offs=13)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5472(line=200, offs=11) -- 5502(line=201, offs=13)
 */
 ATSINSflab(__patsflab_catalan_ats):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5493(line=202, offs=3) -- 5502(line=202, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5492(line=201, offs=3) -- 5501(line=201, offs=12)
 */
 ATSINSmove(tmpret251, catalan_50(arg0)) ;
 
@@ -7000,7 +6998,7 @@
 } /* end of [catalan_ats] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5532(line=204, offs=28) -- 5554(line=205, offs=17)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5531(line=203, offs=28) -- 5553(line=204, offs=17)
 */
 /*
 local: derangements_0$0(level=0)
@@ -7017,11 +7015,11 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5515(line=204, offs=11) -- 5555(line=205, offs=18)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5514(line=203, offs=11) -- 5554(line=204, offs=18)
 */
 ATSINSflab(__patsflab_derangements_ats):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5540(line=205, offs=3) -- 5554(line=205, offs=17)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5539(line=204, offs=3) -- 5553(line=204, offs=17)
 */
 ATSINSmove(tmpret252, derangements_0(arg0)) ;
 
@@ -7030,7 +7028,7 @@
 } /* end of [derangements_ats] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5584(line=207, offs=28) -- 5613(line=208, offs=21)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5583(line=206, offs=28) -- 5612(line=207, offs=21)
 */
 /*
 local: permutations_42$0(level=0)
@@ -7047,11 +7045,11 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5567(line=207, offs=11) -- 5613(line=208, offs=21)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5566(line=206, offs=11) -- 5612(line=207, offs=21)
 */
 ATSINSflab(__patsflab_permutations_ats):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5595(line=208, offs=3) -- 5613(line=208, offs=21)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5594(line=207, offs=3) -- 5612(line=207, offs=21)
 */
 ATSINSmove(tmpret253, permutations_42(arg0, arg1)) ;
 
@@ -7060,7 +7058,7 @@
 } /* end of [permutations_ats] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5641(line=210, offs=27) -- 5662(line=211, offs=16)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5640(line=209, offs=27) -- 5661(line=210, offs=16)
 */
 /*
 local: max_regions_93$0(level=0)
@@ -7077,11 +7075,11 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5625(line=210, offs=11) -- 5663(line=211, offs=17)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5624(line=209, offs=11) -- 5662(line=210, offs=17)
 */
 ATSINSflab(__patsflab_max_regions_ats):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5649(line=211, offs=3) -- 5662(line=211, offs=16)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5648(line=210, offs=3) -- 5661(line=210, offs=16)
 */
 ATSINSmove(tmpret254, max_regions_93(arg0)) ;
 
diff --git a/cbits/number-theory.c b/cbits/number-theory.c
--- a/cbits/number-theory.c
+++ b/cbits/number-theory.c
@@ -1135,45 +1135,53 @@
 
 ATSstatic()
 atstkind_t0ype(atstype_int)
-totient_158(atstkind_t0ype(atstype_int)) ;
+radical_158(atstkind_t0ype(atstype_int)) ;
 
 ATSstatic()
+atstkind_t0ype(atstype_int)
+product_159(atstkind_type(atstype_ptrk)) ;
+
+ATSstatic()
+atstkind_t0ype(atstype_int)
+totient_160(atstkind_t0ype(atstype_int)) ;
+
+ATSstatic()
 postiats_tyrec_0
-adjust_contents_159(postiats_tyrec_0, atstkind_t0ype(atstype_int)) ;
+adjust_contents_161(postiats_tyrec_0, atstkind_t0ype(atstype_int)) ;
 
 #if(0)
 #if(0)
 ATSextern()
 atstyvar_type(res)
-ATSLIB_056_prelude__stream_vt_foldleft_cloptr__161(atstkind_type(atstype_ptrk), atstyvar_type(res), atstype_cloptr) ;
+ATSLIB_056_prelude__stream_vt_foldleft_cloptr__163(atstkind_type(atstype_ptrk), atstyvar_type(res), atstype_cloptr) ;
 #endif // end of [QUALIFIED]
 #endif // end of [TEMPLATE]
 
 #if(0)
 ATSstatic()
 atstyvar_type(res)
-loop_162__162(atstkind_type(atstype_ptrk), atstyvar_type(res), atstype_cloptr) ;
+loop_164__164(atstkind_type(atstype_ptrk), atstyvar_type(res), atstype_cloptr) ;
 #endif // end of [TEMPLATE]
 
 ATSstatic()
 postiats_tyrec_0
-ATSLIB_056_prelude__stream_vt_foldleft_cloptr__161__1(atstkind_type(atstype_ptrk), postiats_tyrec_0, atstype_cloptr) ;
+ATSLIB_056_prelude__stream_vt_foldleft_cloptr__163__1(atstkind_type(atstype_ptrk), postiats_tyrec_0, atstype_cloptr) ;
 
 ATSstatic()
 postiats_tyrec_0
-loop_162__162__1(atstkind_type(atstype_ptrk), postiats_tyrec_0, atstype_cloptr) ;
+loop_164__164__1(atstkind_type(atstype_ptrk), postiats_tyrec_0, atstype_cloptr) ;
 
 ATSstatic()
 postiats_tyrec_0
-__patsfun_165(postiats_tyrec_0, atsrefarg1_type(atstkind_t0ype(atstype_int))) ;
+__patsfun_167(postiats_tyrec_0, atsrefarg1_type(atstkind_t0ype(atstype_int))) ;
 
 ATSstatic()
 atstkind_type(atstype_ptrk)
-totient_sum_166(atstkind_t0ype(atstype_int)) ;
+totient_sum_168(atstkind_t0ype(atstype_int)) ;
 
 ATSstatic()
 atstkind_type(atstype_ptrk)
-loop_167(atstkind_t0ype(atstype_int), atstkind_t0ype(atstype_int)) ;
+loop_169(atstkind_t0ype(atstype_int), atstkind_t0ype(atstype_int)) ;
 
 ATSstatic()
 atstkind_t0ype(atstype_bool)
@@ -1183,13 +1191,13 @@
 #if(0)
 ATSextern()
 atstkind_type(atstype_ptrk)
-ATSCNTRB_056_HX_056_intinf_vt__add_intinf0_int__169(atstkind_type(atstype_ptrk), atstkind_t0ype(atstype_int)) ;
+ATSCNTRB_056_HX_056_intinf_vt__add_intinf0_int__171(atstkind_type(atstype_ptrk), atstkind_t0ype(atstype_int)) ;
 #endif // end of [QUALIFIED]
 #endif // end of [TEMPLATE]
 
 ATSstatic()
 atstkind_type(atstype_ptrk)
-ATSCNTRB_056_HX_056_intinf_vt__add_intinf0_int__169__1(atstkind_type(atstype_ptrk), atstkind_t0ype(atstype_int)) ;
+ATSCNTRB_056_HX_056_intinf_vt__add_intinf0_int__171__1(atstkind_type(atstype_ptrk), atstkind_t0ype(atstype_int)) ;
 
 ATSstatic()
 atstkind_type(atstype_ptrk)
@@ -1202,6 +1210,12 @@
 #if(0)
 ATSextern()
 atstkind_t0ype(atstype_int)
+radical_ats(atstkind_t0ype(atstype_int)) ;
+#endif // end of [QUALIFIED]
+
+#if(0)
+ATSextern()
+atstkind_t0ype(atstype_int)
 sum_divisors_ats(atstkind_t0ype(atstype_int)) ;
 #endif // end of [QUALIFIED]
 
@@ -1891,38 +1905,38 @@
 return __patsfun_152__closureinit(ATS_MALLOC(sizeof(__patsfun_152__closure_t0ype))) ;
 } /* end of [closurerize] */
 ATSclosurerize_end()
-ATSclosurerize_beg(__patsfun_165, (), (postiats_tyrec_0, atsrefarg1_type(atstkind_t0ype(atstype_int))), postiats_tyrec_0)
+ATSclosurerize_beg(__patsfun_167, (), (postiats_tyrec_0, atsrefarg1_type(atstkind_t0ype(atstype_int))), postiats_tyrec_0)
 typedef
 ATSstruct {
 atstype_funptr cfun ;
-} __patsfun_165__closure_t0ype ;
+} __patsfun_167__closure_t0ype ;
 ATSstatic()
 postiats_tyrec_0
-__patsfun_165__cfun
+__patsfun_167__cfun
 (
-__patsfun_165__closure_t0ype *p_cenv, postiats_tyrec_0 arg0, atsrefarg1_type(atstkind_t0ype(atstype_int)) arg1
+__patsfun_167__closure_t0ype *p_cenv, postiats_tyrec_0 arg0, atsrefarg1_type(atstkind_t0ype(atstype_int)) arg1
 )
 {
-ATSFCreturn(__patsfun_165(arg0, arg1)) ;
+ATSFCreturn(__patsfun_167(arg0, arg1)) ;
 } /* end of [cfun] */
 ATSstatic()
 atstype_cloptr
-__patsfun_165__closureinit
+__patsfun_167__closureinit
 (
-__patsfun_165__closure_t0ype *p_cenv
+__patsfun_167__closure_t0ype *p_cenv
 )
 {
-p_cenv->cfun = __patsfun_165__cfun ;
+p_cenv->cfun = __patsfun_167__cfun ;
 return p_cenv ;
 } /* end of [closureinit] */
 ATSstatic()
 atstype_cloptr
-__patsfun_165__closurerize
+__patsfun_167__closurerize
 (
 // argumentless
 )
 {
-return __patsfun_165__closureinit(ATS_MALLOC(sizeof(__patsfun_165__closure_t0ype))) ;
+return __patsfun_167__closureinit(ATS_MALLOC(sizeof(__patsfun_167__closure_t0ype))) ;
 } /* end of [closurerize] */
 ATSclosurerize_end()
 /*
@@ -10600,32 +10614,29 @@
 } /* end of [ATSLIB_056_prelude__gt_g1int_int__6__9] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6533(line=249, offs=4) -- 7022(line=261, offs=8)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6555(line=249, offs=4) -- 6870(line=261, offs=8)
 */
 /*
 local: prime_factors_142$0(level=0)
-global: sqrt_int_48$0(level=0), is_prime_51$0(level=0), rip_136$0(level=0), prime_factors_142$0(level=0), totient_158$0(level=0)
+global: sqrt_int_48$0(level=0), is_prime_51$0(level=0), rip_136$0(level=0), prime_factors_142$0(level=0), radical_158$0(level=0)
 local: 
 global: 
 */
 ATSstatic()
 atstkind_t0ype(atstype_int)
-totient_158(atstkind_t0ype(atstype_int) arg0)
+radical_158(atstkind_t0ype(atstype_int) arg0)
 {
 /* tmpvardeclst(beg) */
 ATStmpdec(tmpret401, atstkind_t0ype(atstype_int)) ;
-ATStmpdec(tmpref406, atstkind_type(atstype_ptrk)) ;
-ATStmpdec(tmpref407, postiats_tyrec_0) ;
-ATStmpdec(tmpref408, postiats_tyrec_0) ;
-ATStmpdec(tmp426, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmpref402, atstkind_type(atstype_ptrk)) ;
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6533(line=249, offs=4) -- 7022(line=261, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6555(line=249, offs=4) -- 6870(line=261, offs=8)
 */
-ATSINSflab(__patsflab_totient_158):
+ATSINSflab(__patsflab_radical_158):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6566(line=250, offs=3) -- 7022(line=261, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6588(line=250, offs=3) -- 6870(line=261, offs=8)
 */
 ATScaseof_beg()
 /*
@@ -10633,15 +10644,15 @@
 */
 ATSbranch_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6583(line=251, offs=7) -- 6584(line=251, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6605(line=251, offs=7) -- 6606(line=251, offs=8)
 */
 ATSINSlab(__atstmplab37):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6541(line=249, offs=12) -- 6542(line=249, offs=13)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6563(line=249, offs=12) -- 6564(line=249, offs=13)
 */
 ATSifnthen(ATSCKpat_int(arg0, ATSPMVint(1))) { ATSINSgoto(__atstmplab39) ; } ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6584(line=251, offs=8) -- 6584(line=251, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6606(line=251, offs=8) -- 6606(line=251, offs=8)
 */
 ATSINSlab(__atstmplab38):
 /*
@@ -10651,14 +10662,14 @@
 ibranch-mbody:
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6588(line=251, offs=12) -- 6589(line=251, offs=13)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6610(line=251, offs=12) -- 6611(line=251, offs=13)
 */
 ATSINSmove(tmpret401, ATSPMVi0nt(1)) ;
 ATSbranch_end()
 
 ATSbranch_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6597(line=252, offs=8) -- 6597(line=252, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6619(line=252, offs=8) -- 6619(line=252, offs=8)
 */
 ATSINSlab(__atstmplab39):
 /*
@@ -10668,62 +10679,288 @@
 ibranch-mbody:
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6602(line=252, offs=13) -- 7022(line=261, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6624(line=252, offs=13) -- 6870(line=261, offs=8)
 */
 /*
 letpush(beg)
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6756(line=256, offs=11) -- 6757(line=256, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6638(line=253, offs=11) -- 6639(line=253, offs=12)
 */
 /*
-ATSINStmpdec(tmpref406) ;
+ATSINStmpdec(tmpref402) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6776(line=256, offs=31) -- 6791(line=256, offs=46)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6658(line=253, offs=31) -- 6673(line=253, offs=46)
 */
-ATSINSmove(tmpref406, prime_factors_142(arg0)) ;
+ATSINSmove(tmpref402, prime_factors_142(arg0)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6803(line=257, offs=11) -- 6813(line=257, offs=21)
+letpush(end)
 */
+
 /*
-ATSINStmpdec(tmpref407) ;
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6852(line=260, offs=7) -- 6861(line=260, offs=16)
 */
+ATSINSmove(tmpret401, product_159(tmpref402)) ;
+
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6816(line=257, offs=24) -- 6842(line=257, offs=50)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6624(line=252, offs=13) -- 6870(line=261, offs=8)
 */
+/*
+INSletpop()
+*/
+ATSbranch_end()
+
+/*
+** ibranchlst-end
+*/
+ATScaseof_end()
+
+ATSfunbody_end()
+ATSreturn(tmpret401) ;
+} /* end of [radical_158] */
+
+/*
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6692(line=255, offs=11) -- 6838(line=258, offs=34)
+*/
+/*
+local: product_159$0(level=1)
+global: product_159$0(level=1)
+local: 
+global: 
+*/
+ATSstatic()
+atstkind_t0ype(atstype_int)
+product_159(atstkind_type(atstype_ptrk) arg0)
+{
+/* tmpvardeclst(beg) */
+ATStmpdec(tmpret403, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmp404, atstype_boxed) ;
+ATStmpdec(tmp405, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmp406, atstkind_type(atstype_ptrk)) ;
+ATStmpdec(tmp407, atstkind_t0ype(atstype_int)) ;
+/* tmpvardeclst(end) */
+ATSfunbody_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6692(line=255, offs=11) -- 6838(line=258, offs=34)
+*/
+ATSINSflab(__patsflab_product_159):
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6743(line=256, offs=15) -- 6746(line=256, offs=18)
+*/
+ATSINSmove_llazyeval(tmp404, atstype_boxed, arg0) ;
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6737(line=256, offs=9) -- 6838(line=258, offs=34)
+*/
+ATScaseof_beg()
+/*
+** ibranchlst-beg
+*/
+ATSbranch_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6762(line=257, offs=13) -- 6785(line=257, offs=36)
+*/
+ATSINSlab(__atstmplab40):
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6743(line=256, offs=15) -- 6746(line=256, offs=18)
+*/
+ATSifthen(ATSCKptrisnull(tmp404)) { ATSINSgoto(__atstmplab43) ; } ;
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6785(line=257, offs=36) -- 6785(line=257, offs=36)
+*/
+ATSINSlab(__atstmplab41):
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6779(line=257, offs=30) -- 6780(line=257, offs=31)
+*/
+ATSINSmove(tmp405, ATSSELcon(tmp404, postiats_tysum_1, atslab__0)) ;
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6782(line=257, offs=33) -- 6784(line=257, offs=35)
+*/
+ATSINSmove(tmp406, ATSSELcon(tmp404, postiats_tysum_1, atslab__1)) ;
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6762(line=257, offs=13) -- 6804(line=257, offs=55)
+*/
+ATSINSfreecon(tmp404) ;
+/*
+emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
+*/
+/*
+ibranch-mbody:
+*/
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6793(line=257, offs=44) -- 6803(line=257, offs=54)
+*/
+ATSINSmove(tmp407, product_159(tmp406)) ;
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6789(line=257, offs=40) -- 6803(line=257, offs=54)
+*/
+ATSINSmove(tmpret403, atspre_g0int_mul_int(tmp405, tmp407)) ;
+
+ATSbranch_end()
+
+ATSbranch_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6817(line=258, offs=13) -- 6833(line=258, offs=29)
+*/
+ATSINSlab(__atstmplab42):
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6743(line=256, offs=15) -- 6746(line=256, offs=18)
+*/
+#if(0)
+ATSifthen(ATSCKptriscons(tmp404)) { ATSINSdeadcode_fail() ; } ;
+#endif
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6833(line=258, offs=29) -- 6833(line=258, offs=29)
+*/
+ATSINSlab(__atstmplab43):
+/*
+emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
+*/
+/*
+ibranch-mbody:
+*/
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6837(line=258, offs=33) -- 6838(line=258, offs=34)
+*/
+ATSINSmove(tmpret403, ATSPMVi0nt(1)) ;
+ATSbranch_end()
+
+/*
+** ibranchlst-end
+*/
+ATScaseof_end()
+
+ATSfunbody_end()
+ATSreturn(tmpret403) ;
+} /* end of [product_159] */
+
+/*
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6904(line=264, offs=4) -- 7393(line=276, offs=8)
+*/
+/*
+local: prime_factors_142$0(level=0)
+global: sqrt_int_48$0(level=0), is_prime_51$0(level=0), rip_136$0(level=0), prime_factors_142$0(level=0), totient_160$0(level=0)
+local: 
+global: 
+*/
+ATSstatic()
+atstkind_t0ype(atstype_int)
+totient_160(atstkind_t0ype(atstype_int) arg0)
+{
+/* tmpvardeclst(beg) */
+ATStmpdec(tmpret408, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmpref413, atstkind_type(atstype_ptrk)) ;
+ATStmpdec(tmpref414, postiats_tyrec_0) ;
+ATStmpdec(tmpref415, postiats_tyrec_0) ;
+ATStmpdec(tmp433, atstkind_t0ype(atstype_int)) ;
+/* tmpvardeclst(end) */
+ATSfunbody_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6904(line=264, offs=4) -- 7393(line=276, offs=8)
+*/
+ATSINSflab(__patsflab_totient_160):
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6937(line=265, offs=3) -- 7393(line=276, offs=8)
+*/
+ATScaseof_beg()
+/*
+** ibranchlst-beg
+*/
+ATSbranch_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6954(line=266, offs=7) -- 6955(line=266, offs=8)
+*/
+ATSINSlab(__atstmplab44):
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6912(line=264, offs=12) -- 6913(line=264, offs=13)
+*/
+ATSifnthen(ATSCKpat_int(arg0, ATSPMVint(1))) { ATSINSgoto(__atstmplab46) ; } ;
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6955(line=266, offs=8) -- 6955(line=266, offs=8)
+*/
+ATSINSlab(__atstmplab45):
+/*
+emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
+*/
+/*
+ibranch-mbody:
+*/
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6959(line=266, offs=12) -- 6960(line=266, offs=13)
+*/
+ATSINSmove(tmpret408, ATSPMVi0nt(1)) ;
+ATSbranch_end()
+
+ATSbranch_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6968(line=267, offs=8) -- 6968(line=267, offs=8)
+*/
+ATSINSlab(__atstmplab46):
+/*
+emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
+*/
+/*
+ibranch-mbody:
+*/
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6973(line=267, offs=13) -- 7393(line=276, offs=8)
+*/
+/*
+letpush(beg)
+*/
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7127(line=271, offs=11) -- 7128(line=271, offs=12)
+*/
+/*
+ATSINStmpdec(tmpref413) ;
+*/
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7147(line=271, offs=31) -- 7162(line=271, offs=46)
+*/
+ATSINSmove(tmpref413, prime_factors_142(arg0)) ;
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7174(line=272, offs=11) -- 7184(line=272, offs=21)
+*/
+/*
+ATSINStmpdec(tmpref414) ;
+*/
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7187(line=272, offs=24) -- 7213(line=272, offs=50)
+*/
 ATSINSmove_fltrec_beg()
-ATSINSstore_fltrec_ofs(tmpref407, postiats_tyrec_0, atslab__first, ATSPMVi0nt(1)) ;
-ATSINSstore_fltrec_ofs(tmpref407, postiats_tyrec_0, atslab__second, ATSPMVi0nt(1)) ;
+ATSINSstore_fltrec_ofs(tmpref414, postiats_tyrec_0, atslab__first, ATSPMVi0nt(1)) ;
+ATSINSstore_fltrec_ofs(tmpref414, postiats_tyrec_0, atslab__second, ATSPMVi0nt(1)) ;
 ATSINSmove_fltrec_end()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6860(line=258, offs=11) -- 6861(line=258, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7231(line=273, offs=11) -- 7232(line=273, offs=12)
 */
 /*
-ATSINStmpdec(tmpref408) ;
+ATSINStmpdec(tmpref415) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6864(line=258, offs=15) -- 6951(line=258, offs=102)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7235(line=273, offs=15) -- 7322(line=273, offs=102)
 */
-ATSINSmove(tmpref408, ATSLIB_056_prelude__stream_vt_foldleft_cloptr__161__1(tmpref406, tmpref407, ATSPMVcfunlab(1, __patsfun_165, ()))) ;
+ATSINSmove(tmpref415, ATSLIB_056_prelude__stream_vt_foldleft_cloptr__163__1(tmpref413, tmpref414, ATSPMVcfunlab(1, __patsfun_167, ()))) ;
 
 /*
 letpush(end)
 */
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6982(line=260, offs=17) -- 7003(line=260, offs=38)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7353(line=275, offs=17) -- 7374(line=275, offs=38)
 */
-ATSINSmove(tmp426, atspre_g0int_mul_int(arg0, ATSSELfltrec(tmpref408, postiats_tyrec_0, atslab__first))) ;
+ATSINSmove(tmp433, atspre_g0int_mul_int(arg0, ATSSELfltrec(tmpref415, postiats_tyrec_0, atslab__first))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6972(line=260, offs=7) -- 7014(line=260, offs=49)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7343(line=275, offs=7) -- 7385(line=275, offs=49)
 */
-ATSINSmove(tmpret401, atspre_g0int_div_int(tmp426, ATSSELfltrec(tmpref408, postiats_tyrec_0, atslab__second))) ;
+ATSINSmove(tmpret408, atspre_g0int_div_int(tmp433, ATSSELfltrec(tmpref415, postiats_tyrec_0, atslab__second))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6602(line=252, offs=13) -- 7022(line=261, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6973(line=267, offs=13) -- 7393(line=276, offs=8)
 */
 /*
 INSletpop()
@@ -10736,58 +10973,58 @@
 ATScaseof_end()
 
 ATSfunbody_end()
-ATSreturn(tmpret401) ;
-} /* end of [totient_158] */
+ATSreturn(tmpret408) ;
+} /* end of [totient_160] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6615(line=253, offs=10) -- 6738(line=254, offs=80)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6986(line=268, offs=10) -- 7109(line=269, offs=80)
 */
 /*
 local: 
-global: adjust_contents_159$0(level=1)
+global: adjust_contents_161$0(level=1)
 local: 
 global: 
 */
 ATSstatic()
 postiats_tyrec_0
-adjust_contents_159(postiats_tyrec_0 arg0, atstkind_t0ype(atstype_int) arg1)
+adjust_contents_161(postiats_tyrec_0 arg0, atstkind_t0ype(atstype_int) arg1)
 {
 /* tmpvardeclst(beg) */
-ATStmpdec(tmpret402, postiats_tyrec_0) ;
-ATStmpdec(tmp403, atstkind_t0ype(atstype_int)) ;
-ATStmpdec(tmp404, atstkind_t0ype(atstype_int)) ;
-ATStmpdec(tmp405, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmpret409, postiats_tyrec_0) ;
+ATStmpdec(tmp410, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmp411, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmp412, atstkind_t0ype(atstype_int)) ;
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6615(line=253, offs=10) -- 6738(line=254, offs=80)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6986(line=268, offs=10) -- 7109(line=269, offs=80)
 */
-ATSINSflab(__patsflab_adjust_contents_159):
+ATSINSflab(__patsflab_adjust_contents_161):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6697(line=254, offs=39) -- 6702(line=254, offs=44)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7068(line=269, offs=39) -- 7073(line=269, offs=44)
 */
-ATSINSmove(tmp404, atspre_g0int_sub_int(arg1, ATSPMVi0nt(1))) ;
+ATSINSmove(tmp411, atspre_g0int_sub_int(arg1, ATSPMVi0nt(1))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6678(line=254, offs=20) -- 6703(line=254, offs=45)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7049(line=269, offs=20) -- 7074(line=269, offs=45)
 */
-ATSINSmove(tmp403, atspre_g0int_mul_int(ATSSELfltrec(arg0, postiats_tyrec_0, atslab__first), tmp404)) ;
+ATSINSmove(tmp410, atspre_g0int_mul_int(ATSSELfltrec(arg0, postiats_tyrec_0, atslab__first), tmp411)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6714(line=254, offs=56) -- 6736(line=254, offs=78)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7085(line=269, offs=56) -- 7107(line=269, offs=78)
 */
-ATSINSmove(tmp405, atspre_g0int_mul_int(ATSSELfltrec(arg0, postiats_tyrec_0, atslab__second), arg1)) ;
+ATSINSmove(tmp412, atspre_g0int_mul_int(ATSSELfltrec(arg0, postiats_tyrec_0, atslab__second), arg1)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6667(line=254, offs=9) -- 6738(line=254, offs=80)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7038(line=269, offs=9) -- 7109(line=269, offs=80)
 */
 ATSINSmove_fltrec_beg()
-ATSINSstore_fltrec_ofs(tmpret402, postiats_tyrec_0, atslab__first, tmp403) ;
-ATSINSstore_fltrec_ofs(tmpret402, postiats_tyrec_0, atslab__second, tmp405) ;
+ATSINSstore_fltrec_ofs(tmpret409, postiats_tyrec_0, atslab__first, tmp410) ;
+ATSINSstore_fltrec_ofs(tmpret409, postiats_tyrec_0, atslab__second, tmp412) ;
 ATSINSmove_fltrec_end()
 ATSfunbody_end()
-ATSreturn(tmpret402) ;
-} /* end of [adjust_contents_159] */
+ATSreturn(tmpret409) ;
+} /* end of [adjust_contents_161] */
 
 #if(0)
 /*
@@ -10795,7 +11032,7 @@
 */
 /*
 local: 
-global: stream_vt_foldleft_cloptr$161$0(level=0)
+global: stream_vt_foldleft_cloptr$163$0(level=0)
 local: 
 global: 
 */
@@ -10806,10 +11043,10 @@
 tmpsub = None()
 */
 atstyvar_type(res)
-ATSLIB_056_prelude__stream_vt_foldleft_cloptr__161(atstkind_type(atstype_ptrk) arg0, atstyvar_type(res) arg1, atstype_cloptr arg2)
+ATSLIB_056_prelude__stream_vt_foldleft_cloptr__163(atstkind_type(atstype_ptrk) arg0, atstyvar_type(res) arg1, atstype_cloptr arg2)
 {
 /* tmpvardeclst(beg) */
-ATStmpdec(tmpret409, atstyvar_type(res)) ;
+ATStmpdec(tmpret416, atstyvar_type(res)) ;
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
@@ -10829,7 +11066,7 @@
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 29964(line=1865, offs=3) -- 29984(line=1865, offs=23)
 */
-ATSINSmove(tmpret409, ATSfunclo_fun(PMVd2vfunlab(d2v=loop$4479(1), flab=loop_162$0(level=1)), (atstkind_type(atstype_ptrk), atstyvar_type(res), atstype_cloptr), atstyvar_type(res))(arg0, arg1, arg2)) ;
+ATSINSmove(tmpret416, ATSfunclo_fun(PMVd2vfunlab(d2v=loop$4479(1), flab=loop_164$0(level=1)), (atstkind_type(atstype_ptrk), atstyvar_type(res), atstype_cloptr), atstyvar_type(res))(arg0, arg1, arg2)) ;
 
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 29964(line=1865, offs=3) -- 30423(line=1895, offs=2)
@@ -10838,8 +11075,8 @@
 INSletpop()
 */
 ATSfunbody_end()
-ATSreturn(tmpret409) ;
-} /* end of [ATSLIB_056_prelude__stream_vt_foldleft_cloptr__161] */
+ATSreturn(tmpret416) ;
+} /* end of [ATSLIB_056_prelude__stream_vt_foldleft_cloptr__163] */
 #endif // end of [TEMPLATE]
 
 #if(0)
@@ -10847,31 +11084,31 @@
 /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats: 30000(line=1869, offs=1) -- 30401(line=1893, offs=4)
 */
 /*
-local: loop_162$0(level=1)
-global: loop_162$0(level=1)
+local: loop_164$0(level=1)
+global: loop_164$0(level=1)
 local: 
 global: 
 */
 ATSstatic()
 atstyvar_type(res)
-loop_162__162(atstkind_type(atstype_ptrk) arg0, atstyvar_type(res) arg1, atstype_cloptr arg2)
+loop_164__164(atstkind_type(atstype_ptrk) arg0, atstyvar_type(res) arg1, atstype_cloptr arg2)
 {
 /* tmpvardeclst(beg) */
 ATStmpdec(apy0, atstkind_type(atstype_ptrk)) ;
 ATStmpdec(apy1, atstyvar_type(res)) ;
 ATStmpdec(apy2, atstype_cloptr) ;
-ATStmpdec(tmpret410, atstyvar_type(res)) ;
-ATStmpdec(tmpref411, atstkind_type(atstype_ptrk)) ;
-ATStmpdec(tmp412, atstype_boxed) ;
-// ATStmpdec_void(tmp415) ;
-ATStmpdec(tmp416, atstyvar_type(res)) ;
-ATStmpdec(tmp417, atstkind_type(atstype_ptrk)) ;
+ATStmpdec(tmpret417, atstyvar_type(res)) ;
+ATStmpdec(tmpref418, atstkind_type(atstype_ptrk)) ;
+ATStmpdec(tmp419, atstype_boxed) ;
+// ATStmpdec_void(tmp422) ;
+ATStmpdec(tmp423, atstyvar_type(res)) ;
+ATStmpdec(tmp424, atstkind_type(atstype_ptrk)) ;
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30000(line=1869, offs=1) -- 30401(line=1893, offs=4)
 */
-ATSINSflab(__patsflab_loop_162):
+ATSINSflab(__patsflab_loop_164):
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30078(line=1875, offs=6) -- 30401(line=1893, offs=4)
 */
@@ -10882,12 +11119,12 @@
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30088(line=1876, offs=7) -- 30094(line=1876, offs=13)
 */
 /*
-ATSINStmpdec(tmpref411) ;
+ATSINStmpdec(tmpref418) ;
 */
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30097(line=1876, offs=16) -- 30100(line=1876, offs=19)
 */
-ATSINSmove_llazyeval(tmpref411, atstype_boxed, arg0) ;
+ATSINSmove_llazyeval(tmpref418, atstype_boxed, arg0) ;
 /*
 letpush(end)
 */
@@ -10895,7 +11132,7 @@
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30113(line=1880, offs=1) -- 30119(line=1880, offs=7)
 */
-ATSINSmove(tmp412, tmpref411) ;
+ATSINSmove(tmp419, tmpref418) ;
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30107(line=1879, offs=1) -- 30367(line=1891, offs=6)
 */
@@ -10907,15 +11144,15 @@
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30134(line=1882, offs=3) -- 30155(line=1883, offs=7)
 */
-ATSINSlab(__atstmplab40):
+ATSINSlab(__atstmplab47):
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30113(line=1880, offs=1) -- 30119(line=1880, offs=7)
 */
-ATSifthen(ATSCKptriscons(tmp412)) { ATSINSgoto(__atstmplab43) ; } ;
+ATSifthen(ATSCKptriscons(tmp419)) { ATSINSgoto(__atstmplab50) ; } ;
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30155(line=1883, offs=7) -- 30155(line=1883, offs=7)
 */
-ATSINSlab(__atstmplab41):
+ATSINSlab(__atstmplab48):
 /*
 emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
 */
@@ -10925,29 +11162,29 @@
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30167(line=1885, offs=5) -- 30199(line=1885, offs=37)
 */
-ATSINSmove_void(tmp415, atspre_cloptr_free(ATSPMVcastfn(castvwtp0, atstkind_type(atstype_ptrk), arg2))) ;
+ATSINSmove_void(tmp422, atspre_cloptr_free(ATSPMVcastfn(castvwtp0, atstkind_type(atstype_ptrk), arg2))) ;
 
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30201(line=1885, offs=39) -- 30204(line=1885, offs=42)
 */
-ATSINSmove(tmpret410, arg1) ;
+ATSINSmove(tmpret417, arg1) ;
 ATSbranch_end()
 
 ATSbranch_beg()
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30240(line=1887, offs=3) -- 30269(line=1888, offs=14)
 */
-ATSINSlab(__atstmplab42):
+ATSINSlab(__atstmplab49):
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30113(line=1880, offs=1) -- 30119(line=1880, offs=7)
 */
 #if(0)
-ATSifthen(ATSCKptrisnull(tmp412)) { ATSINSdeadcode_fail() ; } ;
+ATSifthen(ATSCKptrisnull(tmp419)) { ATSINSdeadcode_fail() ; } ;
 #endif
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30269(line=1888, offs=14) -- 30269(line=1888, offs=14)
 */
-ATSINSlab(__atstmplab43):
+ATSINSlab(__atstmplab50):
 /*
 emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
 */
@@ -10963,12 +11200,12 @@
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30291(line=1889, offs=15) -- 30304(line=1889, offs=28)
 */
-ATSINSmove(tmp416, ATSfunclo_clo(ATSPMVrefarg0(arg2), (atstype_cloptr, atstyvar_type(res), atsrefarg1_type(atstyvar_type(a))), atstyvar_type(res))(ATSPMVrefarg0(arg2), arg1, ATSPMVrefarg1(ATSPMVptrof(ATSSELcon(tmp412, postiats_tysum_4, atslab__0))))) ;
+ATSINSmove(tmp423, ATSfunclo_clo(ATSPMVrefarg0(arg2), (atstype_cloptr, atstyvar_type(res), atsrefarg1_type(atstyvar_type(a))), atstyvar_type(res))(ATSPMVrefarg0(arg2), arg1, ATSPMVrefarg1(ATSPMVptrof(ATSSELcon(tmp419, postiats_tysum_4, atslab__0))))) ;
 
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30319(line=1890, offs=15) -- 30322(line=1890, offs=18)
 */
-ATSINSmove(tmp417, ATSSELcon(tmp412, postiats_tysum_4, atslab__1)) ;
+ATSINSmove(tmp424, ATSSELcon(tmp419, postiats_tysum_4, atslab__1)) ;
 /*
 letpush(end)
 */
@@ -10976,18 +11213,18 @@
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30326(line=1890, offs=22) -- 30338(line=1890, offs=34)
 */
-ATSINSfreecon(tmpref411) ;
+ATSINSfreecon(tmpref418) ;
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30341(line=1890, offs=37) -- 30361(line=1890, offs=57)
 */
 ATStailcal_beg()
-ATSINSmove_tlcal(apy0, tmp417) ;
-ATSINSmove_tlcal(apy1, tmp416) ;
+ATSINSmove_tlcal(apy0, tmp424) ;
+ATSINSmove_tlcal(apy1, tmp423) ;
 ATSINSmove_tlcal(apy2, arg2) ;
 ATSINSargmove_tlcal(arg0, apy0) ;
 ATSINSargmove_tlcal(arg1, apy1) ;
 ATSINSargmove_tlcal(arg2, apy2) ;
-ATSINSfgoto(__patsflab_loop_162) ;
+ATSINSfgoto(__patsflab_loop_164) ;
 ATStailcal_end()
 
 /*
@@ -11010,8 +11247,8 @@
 INSletpop()
 */
 ATSfunbody_end()
-ATSreturn(tmpret410) ;
-} /* end of [loop_162__162] */
+ATSreturn(tmpret417) ;
+} /* end of [loop_164__164] */
 #endif // end of [TEMPLATE]
 
 /*
@@ -11019,7 +11256,7 @@
 */
 /*
 local: 
-global: stream_vt_foldleft_cloptr$161$1(level=1)
+global: stream_vt_foldleft_cloptr$163$1(level=1)
 local: 
 global: 
 */
@@ -11027,13 +11264,13 @@
 /*
 imparg = res(8326), a(8327)
 tmparg = S2Evar(res(8326)); S2Evar(a(8327))
-tmpsub = Some(res(8326) -> S2EVar(5933); a(8327) -> S2Eapp(S2Ecst(g0int_t0ype); S2Eextkind(atstype_int)))
+tmpsub = Some(res(8326) -> S2EVar(5935); a(8327) -> S2Eapp(S2Ecst(g0int_t0ype); S2Eextkind(atstype_int)))
 */
 postiats_tyrec_0
-ATSLIB_056_prelude__stream_vt_foldleft_cloptr__161__1(atstkind_type(atstype_ptrk) arg0, postiats_tyrec_0 arg1, atstype_cloptr arg2)
+ATSLIB_056_prelude__stream_vt_foldleft_cloptr__163__1(atstkind_type(atstype_ptrk) arg0, postiats_tyrec_0 arg1, atstype_cloptr arg2)
 {
 /* tmpvardeclst(beg) */
-ATStmpdec(tmpret409__1, postiats_tyrec_0) ;
+ATStmpdec(tmpret416__1, postiats_tyrec_0) ;
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
@@ -11053,7 +11290,7 @@
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 29964(line=1865, offs=3) -- 29984(line=1865, offs=23)
 */
-ATSINSmove(tmpret409__1, loop_162__162__1(arg0, arg1, arg2)) ;
+ATSINSmove(tmpret416__1, loop_164__164__1(arg0, arg1, arg2)) ;
 
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 29964(line=1865, offs=3) -- 30423(line=1895, offs=2)
@@ -11062,38 +11299,38 @@
 INSletpop()
 */
 ATSfunbody_end()
-ATSreturn(tmpret409__1) ;
-} /* end of [ATSLIB_056_prelude__stream_vt_foldleft_cloptr__161__1] */
+ATSreturn(tmpret416__1) ;
+} /* end of [ATSLIB_056_prelude__stream_vt_foldleft_cloptr__163__1] */
 
 /*
 /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats: 30000(line=1869, offs=1) -- 30401(line=1893, offs=4)
 */
 /*
-local: loop_162$1(level=2)
-global: loop_162$1(level=2)
+local: loop_164$1(level=2)
+global: loop_164$1(level=2)
 local: 
 global: 
 */
 ATSstatic()
 postiats_tyrec_0
-loop_162__162__1(atstkind_type(atstype_ptrk) arg0, postiats_tyrec_0 arg1, atstype_cloptr arg2)
+loop_164__164__1(atstkind_type(atstype_ptrk) arg0, postiats_tyrec_0 arg1, atstype_cloptr arg2)
 {
 /* tmpvardeclst(beg) */
 ATStmpdec(apy0, atstkind_type(atstype_ptrk)) ;
 ATStmpdec(apy1, postiats_tyrec_0) ;
 ATStmpdec(apy2, atstype_cloptr) ;
-ATStmpdec(tmpret410__1, postiats_tyrec_0) ;
-ATStmpdec(tmpref411__1, atstkind_type(atstype_ptrk)) ;
-ATStmpdec(tmp412__1, atstype_boxed) ;
-// ATStmpdec_void(tmp415__1) ;
-ATStmpdec(tmp416__1, postiats_tyrec_0) ;
-ATStmpdec(tmp417__1, atstkind_type(atstype_ptrk)) ;
+ATStmpdec(tmpret417__1, postiats_tyrec_0) ;
+ATStmpdec(tmpref418__1, atstkind_type(atstype_ptrk)) ;
+ATStmpdec(tmp419__1, atstype_boxed) ;
+// ATStmpdec_void(tmp422__1) ;
+ATStmpdec(tmp423__1, postiats_tyrec_0) ;
+ATStmpdec(tmp424__1, atstkind_type(atstype_ptrk)) ;
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30000(line=1869, offs=1) -- 30401(line=1893, offs=4)
 */
-ATSINSflab(__patsflab_loop_162):
+ATSINSflab(__patsflab_loop_164):
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30078(line=1875, offs=6) -- 30401(line=1893, offs=4)
 */
@@ -11104,12 +11341,12 @@
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30088(line=1876, offs=7) -- 30094(line=1876, offs=13)
 */
 /*
-ATSINStmpdec(tmpref411) ;
+ATSINStmpdec(tmpref418) ;
 */
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30097(line=1876, offs=16) -- 30100(line=1876, offs=19)
 */
-ATSINSmove_llazyeval(tmpref411__1, atstype_boxed, arg0) ;
+ATSINSmove_llazyeval(tmpref418__1, atstype_boxed, arg0) ;
 /*
 letpush(end)
 */
@@ -11117,7 +11354,7 @@
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30113(line=1880, offs=1) -- 30119(line=1880, offs=7)
 */
-ATSINSmove(tmp412__1, tmpref411__1) ;
+ATSINSmove(tmp419__1, tmpref418__1) ;
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30107(line=1879, offs=1) -- 30367(line=1891, offs=6)
 */
@@ -11129,15 +11366,15 @@
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30134(line=1882, offs=3) -- 30155(line=1883, offs=7)
 */
-ATSINSlab(__atstmplab40):
+ATSINSlab(__atstmplab47):
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30113(line=1880, offs=1) -- 30119(line=1880, offs=7)
 */
-ATSifthen(ATSCKptriscons(tmp412__1)) { ATSINSgoto(__atstmplab43) ; } ;
+ATSifthen(ATSCKptriscons(tmp419__1)) { ATSINSgoto(__atstmplab50) ; } ;
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30155(line=1883, offs=7) -- 30155(line=1883, offs=7)
 */
-ATSINSlab(__atstmplab41):
+ATSINSlab(__atstmplab48):
 /*
 emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
 */
@@ -11147,29 +11384,29 @@
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30167(line=1885, offs=5) -- 30199(line=1885, offs=37)
 */
-ATSINSmove_void(tmp415__1, atspre_cloptr_free(ATSPMVcastfn(castvwtp0, atstkind_type(atstype_ptrk), arg2))) ;
+ATSINSmove_void(tmp422__1, atspre_cloptr_free(ATSPMVcastfn(castvwtp0, atstkind_type(atstype_ptrk), arg2))) ;
 
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30201(line=1885, offs=39) -- 30204(line=1885, offs=42)
 */
-ATSINSmove(tmpret410__1, arg1) ;
+ATSINSmove(tmpret417__1, arg1) ;
 ATSbranch_end()
 
 ATSbranch_beg()
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30240(line=1887, offs=3) -- 30269(line=1888, offs=14)
 */
-ATSINSlab(__atstmplab42):
+ATSINSlab(__atstmplab49):
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30113(line=1880, offs=1) -- 30119(line=1880, offs=7)
 */
 #if(0)
-ATSifthen(ATSCKptrisnull(tmp412__1)) { ATSINSdeadcode_fail() ; } ;
+ATSifthen(ATSCKptrisnull(tmp419__1)) { ATSINSdeadcode_fail() ; } ;
 #endif
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30269(line=1888, offs=14) -- 30269(line=1888, offs=14)
 */
-ATSINSlab(__atstmplab43):
+ATSINSlab(__atstmplab50):
 /*
 emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
 */
@@ -11185,12 +11422,12 @@
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30291(line=1889, offs=15) -- 30304(line=1889, offs=28)
 */
-ATSINSmove(tmp416__1, ATSfunclo_clo(ATSPMVrefarg0(arg2), (atstype_cloptr, postiats_tyrec_0, atsrefarg1_type(atstkind_t0ype(atstype_int))), postiats_tyrec_0)(ATSPMVrefarg0(arg2), arg1, ATSPMVrefarg1(ATSPMVptrof(ATSSELcon(tmp412__1, postiats_tysum_1, atslab__0))))) ;
+ATSINSmove(tmp423__1, ATSfunclo_clo(ATSPMVrefarg0(arg2), (atstype_cloptr, postiats_tyrec_0, atsrefarg1_type(atstkind_t0ype(atstype_int))), postiats_tyrec_0)(ATSPMVrefarg0(arg2), arg1, ATSPMVrefarg1(ATSPMVptrof(ATSSELcon(tmp419__1, postiats_tysum_1, atslab__0))))) ;
 
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30319(line=1890, offs=15) -- 30322(line=1890, offs=18)
 */
-ATSINSmove(tmp417__1, ATSSELcon(tmp412__1, postiats_tysum_1, atslab__1)) ;
+ATSINSmove(tmp424__1, ATSSELcon(tmp419__1, postiats_tysum_1, atslab__1)) ;
 /*
 letpush(end)
 */
@@ -11198,18 +11435,18 @@
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30326(line=1890, offs=22) -- 30338(line=1890, offs=34)
 */
-ATSINSfreecon(tmpref411__1) ;
+ATSINSfreecon(tmpref418__1) ;
 /*
 emit_instr: loc0 = /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/stream_vt.dats({$PATSPRE}/DATS/stream_vt.dats): 30341(line=1890, offs=37) -- 30361(line=1890, offs=57)
 */
 ATStailcal_beg()
-ATSINSmove_tlcal(apy0, tmp417__1) ;
-ATSINSmove_tlcal(apy1, tmp416__1) ;
+ATSINSmove_tlcal(apy0, tmp424__1) ;
+ATSINSmove_tlcal(apy1, tmp423__1) ;
 ATSINSmove_tlcal(apy2, arg2) ;
 ATSINSargmove_tlcal(arg0, apy0) ;
 ATSINSargmove_tlcal(arg1, apy1) ;
 ATSINSargmove_tlcal(arg2, apy2) ;
-ATSINSfgoto(__patsflab_loop_162) ;
+ATSINSfgoto(__patsflab_loop_164) ;
 ATStailcal_end()
 
 /*
@@ -11232,62 +11469,62 @@
 INSletpop()
 */
 ATSfunbody_end()
-ATSreturn(tmpret410__1) ;
-} /* end of [loop_162__162__1] */
+ATSreturn(tmpret417__1) ;
+} /* end of [loop_164__164__1] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6905(line=258, offs=56) -- 6950(line=258, offs=101)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7276(line=273, offs=56) -- 7321(line=273, offs=101)
 */
 /*
-local: adjust_contents_159$0(level=1)
-global: adjust_contents_159$0(level=1), __patsfun_165$0(level=1)
+local: adjust_contents_161$0(level=1)
+global: adjust_contents_161$0(level=1), __patsfun_167$0(level=1)
 local: 
 global: 
 */
 ATSstatic()
 postiats_tyrec_0
-__patsfun_165(postiats_tyrec_0 arg0, atsrefarg1_type(atstkind_t0ype(atstype_int)) arg1)
+__patsfun_167(postiats_tyrec_0 arg0, atsrefarg1_type(atstkind_t0ype(atstype_int)) arg1)
 {
 /* tmpvardeclst(beg) */
-ATStmpdec(tmpret425, postiats_tyrec_0) ;
+ATStmpdec(tmpret432, postiats_tyrec_0) ;
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6905(line=258, offs=56) -- 6950(line=258, offs=101)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7276(line=273, offs=56) -- 7321(line=273, offs=101)
 */
-ATSINSflab(__patsflab___patsfun_165):
+ATSINSflab(__patsflab___patsfun_167):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 6924(line=258, offs=75) -- 6950(line=258, offs=101)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7295(line=273, offs=75) -- 7321(line=273, offs=101)
 */
-ATSINSmove(tmpret425, adjust_contents_159(arg0, ATSderef(arg1, atstkind_t0ype(atstype_int)))) ;
+ATSINSmove(tmpret432, adjust_contents_161(arg0, ATSderef(arg1, atstkind_t0ype(atstype_int)))) ;
 
 ATSfunbody_end()
-ATSreturn(tmpret425) ;
-} /* end of [__patsfun_165] */
+ATSreturn(tmpret432) ;
+} /* end of [__patsfun_167] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7253(line=266, offs=4) -- 7641(line=280, offs=6)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7624(line=281, offs=4) -- 8012(line=295, offs=6)
 */
 /*
-local: totient_158$0(level=0)
-global: sqrt_int_48$0(level=0), is_prime_51$0(level=0), rip_136$0(level=0), prime_factors_142$0(level=0), totient_158$0(level=0), totient_sum_166$0(level=0)
+local: totient_160$0(level=0)
+global: sqrt_int_48$0(level=0), is_prime_51$0(level=0), rip_136$0(level=0), prime_factors_142$0(level=0), totient_160$0(level=0), totient_sum_168$0(level=0)
 local: 
 global: 
 */
 ATSstatic()
 atstkind_type(atstype_ptrk)
-totient_sum_166(atstkind_t0ype(atstype_int) arg0)
+totient_sum_168(atstkind_t0ype(atstype_int) arg0)
 {
 /* tmpvardeclst(beg) */
-ATStmpdec(tmpret427, atstkind_type(atstype_ptrk)) ;
+ATStmpdec(tmpret434, atstkind_type(atstype_ptrk)) ;
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7253(line=266, offs=4) -- 7641(line=280, offs=6)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7624(line=281, offs=4) -- 8012(line=295, offs=6)
 */
-ATSINSflab(__patsflab_totient_sum_166):
+ATSINSflab(__patsflab_totient_sum_168):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7293(line=267, offs=3) -- 7641(line=280, offs=6)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7664(line=282, offs=3) -- 8012(line=295, offs=6)
 */
 /*
 letpush(beg)
@@ -11297,125 +11534,125 @@
 */
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7625(line=279, offs=5) -- 7635(line=279, offs=15)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7996(line=294, offs=5) -- 8006(line=294, offs=15)
 */
-ATSINSmove(tmpret427, loop_167(ATSPMVi0nt(1), arg0)) ;
+ATSINSmove(tmpret434, loop_169(ATSPMVi0nt(1), arg0)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7293(line=267, offs=3) -- 7641(line=280, offs=6)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7664(line=282, offs=3) -- 8012(line=295, offs=6)
 */
 /*
 INSletpop()
 */
 ATSfunbody_end()
-ATSreturn(tmpret427) ;
-} /* end of [totient_sum_166] */
+ATSreturn(tmpret434) ;
+} /* end of [totient_sum_168] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7305(line=268, offs=9) -- 7615(line=277, offs=40)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7676(line=283, offs=9) -- 7986(line=292, offs=40)
 */
 /*
-local: totient_158$0(level=0), loop_167$0(level=1)
-global: totient_158$0(level=0), loop_167$0(level=1)
+local: totient_160$0(level=0), loop_169$0(level=1)
+global: totient_160$0(level=0), loop_169$0(level=1)
 local: 
 global: 
 */
 ATSstatic()
 atstkind_type(atstype_ptrk)
-loop_167(atstkind_t0ype(atstype_int) arg0, atstkind_t0ype(atstype_int) arg1)
+loop_169(atstkind_t0ype(atstype_int) arg0, atstkind_t0ype(atstype_int) arg1)
 {
 /* tmpvardeclst(beg) */
-ATStmpdec(tmpret428, atstkind_type(atstype_ptrk)) ;
-ATStmpdec(tmp429, atstkind_t0ype(atstype_bool)) ;
-ATStmpdec(tmpref432, atstkind_type(atstype_ptrk)) ;
-ATStmpdec(tmp433, atstkind_t0ype(atstype_int)) ;
-ATStmpdec(tmpref434, atstkind_type(atstype_ptrk)) ;
-ATStmpdec(tmp439, atstkind_t0ype(atstype_int)) ;
-ATStmpdec(tmp444, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmpret435, atstkind_type(atstype_ptrk)) ;
+ATStmpdec(tmp436, atstkind_t0ype(atstype_bool)) ;
+ATStmpdec(tmpref439, atstkind_type(atstype_ptrk)) ;
+ATStmpdec(tmp440, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmpref441, atstkind_type(atstype_ptrk)) ;
+ATStmpdec(tmp446, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmp451, atstkind_t0ype(atstype_int)) ;
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7305(line=268, offs=9) -- 7615(line=277, offs=40)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7676(line=283, offs=9) -- 7986(line=292, offs=40)
 */
-ATSINSflab(__patsflab_loop_167):
+ATSINSflab(__patsflab_loop_169):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7408(line=269, offs=10) -- 7417(line=269, offs=19)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7779(line=284, offs=10) -- 7788(line=284, offs=19)
 */
-ATSINSmove(tmp429, ATSLIB_056_prelude__lt_g1int_int__53__3(arg0, arg1)) ;
+ATSINSmove(tmp436, ATSLIB_056_prelude__lt_g1int_int__53__3(arg0, arg1)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7405(line=269, offs=7) -- 7615(line=277, offs=40)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7776(line=284, offs=7) -- 7986(line=292, offs=40)
 */
 ATSif(
-tmp429
+tmp436
 ) ATSthen() {
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7431(line=270, offs=9) -- 7564(line=275, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7802(line=285, offs=9) -- 7935(line=290, offs=12)
 */
 /*
 letpush(beg)
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7449(line=271, offs=15) -- 7450(line=271, offs=16)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7820(line=286, offs=15) -- 7821(line=286, offs=16)
 */
 /*
-ATSINStmpdec(tmpref432) ;
+ATSINStmpdec(tmpref439) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7458(line=271, offs=24) -- 7463(line=271, offs=29)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7829(line=286, offs=24) -- 7834(line=286, offs=29)
 */
-ATSINSmove(tmp433, atspre_g1int_add_int(arg0, ATSPMVi0nt(1))) ;
+ATSINSmove(tmp440, atspre_g1int_add_int(arg0, ATSPMVi0nt(1))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7453(line=271, offs=19) -- 7471(line=271, offs=37)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7824(line=286, offs=19) -- 7842(line=286, offs=37)
 */
-ATSINSmove(tmpref432, loop_167(tmp433, arg1)) ;
+ATSINSmove(tmpref439, loop_169(tmp440, arg1)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7486(line=272, offs=15) -- 7487(line=272, offs=16)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7857(line=287, offs=15) -- 7858(line=287, offs=16)
 */
 /*
-ATSINStmpdec(tmpref434) ;
+ATSINStmpdec(tmpref441) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7517(line=272, offs=46) -- 7526(line=272, offs=55)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7888(line=287, offs=46) -- 7897(line=287, offs=55)
 */
-ATSINSmove(tmp439, totient_158(arg0)) ;
+ATSINSmove(tmp446, totient_160(arg0)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7490(line=272, offs=19) -- 7529(line=272, offs=58)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7861(line=287, offs=19) -- 7900(line=287, offs=58)
 */
-ATSINSmove(tmpref434, ATSCNTRB_056_HX_056_intinf_vt__add_intinf0_int__169__1(tmpref432, ATSPMVcastfn(witness, atstkind_t0ype(atstype_int), tmp439))) ;
+ATSINSmove(tmpref441, ATSCNTRB_056_HX_056_intinf_vt__add_intinf0_int__171__1(tmpref439, ATSPMVcastfn(witness, atstkind_t0ype(atstype_int), tmp446))) ;
 
 /*
 letpush(end)
 */
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7551(line=274, offs=11) -- 7552(line=274, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7922(line=289, offs=11) -- 7923(line=289, offs=12)
 */
-ATSINSmove(tmpret428, tmpref434) ;
+ATSINSmove(tmpret435, tmpref441) ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7431(line=270, offs=9) -- 7564(line=275, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7802(line=285, offs=9) -- 7935(line=290, offs=12)
 */
 /*
 INSletpop()
 */
 } ATSelse() {
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7584(line=277, offs=9) -- 7615(line=277, offs=40)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7955(line=292, offs=9) -- 7986(line=292, offs=40)
 */
-ATSINSmove(tmp444, totient_158(arg0)) ;
+ATSINSmove(tmp451, totient_160(arg0)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7584(line=277, offs=9) -- 7615(line=277, offs=40)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7955(line=292, offs=9) -- 7986(line=292, offs=40)
 */
-ATSINSmove(tmpret428, ATSCNTRB_056_HX_056_intinf_vt__intinf_make_int__45__2(ATSPMVcastfn(witness, atstkind_t0ype(atstype_int), tmp444))) ;
+ATSINSmove(tmpret435, ATSCNTRB_056_HX_056_intinf_vt__intinf_make_int__45__2(ATSPMVcastfn(witness, atstkind_t0ype(atstype_int), tmp451))) ;
 
 } /* ATSendif */
 ATSfunbody_end()
-ATSreturn(tmpret428) ;
-} /* end of [loop_167] */
+ATSreturn(tmpret435) ;
+} /* end of [loop_169] */
 
 /*
 /home/vanessa/.atspkg/0.3.11/lib/ats2-postiats-0.3.11/prelude/DATS/integer.dats: 12520(line=650, offs=3) -- 12559(line=650, offs=42)
@@ -11464,7 +11701,7 @@
 */
 /*
 local: 
-global: add_intinf0_int$169$0(level=0)
+global: add_intinf0_int$171$0(level=0)
 local: 
 global: 
 */
@@ -11475,11 +11712,11 @@
 tmpsub = None()
 */
 atstkind_type(atstype_ptrk)
-ATSCNTRB_056_HX_056_intinf_vt__add_intinf0_int__169(atstkind_type(atstype_ptrk) arg0, atstkind_t0ype(atstype_int) arg1)
+ATSCNTRB_056_HX_056_intinf_vt__add_intinf0_int__171(atstkind_type(atstype_ptrk) arg0, atstkind_t0ype(atstype_int) arg1)
 {
 /* tmpvardeclst(beg) */
-ATStmpdec(tmpret435, atstkind_type(atstype_ptrk)) ;
-// ATStmpdec_void(tmp436) ;
+ATStmpdec(tmpret442, atstkind_type(atstype_ptrk)) ;
+// ATStmpdec_void(tmp443) ;
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
@@ -11495,7 +11732,7 @@
 /*
 emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/.atspkg/contrib/atscntrb-hx-intinf/DATS/intinf_vt.dats: 5184(line=277, offs=10) -- 5212(line=277, offs=38)
 */
-ATSINSmove_void(tmp436, atscntrb_gmp_mpz_add2_int(ATSPMVrefarg1(ATSSELrecsin(arg0, atstkind_type(atstype_ptrk), atslab__2)), arg1)) ;
+ATSINSmove_void(tmp443, atscntrb_gmp_mpz_add2_int(ATSPMVrefarg1(ATSSELrecsin(arg0, atstkind_type(atstype_ptrk), atslab__2)), arg1)) ;
 
 /*
 letpush(end)
@@ -11504,7 +11741,7 @@
 /*
 emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/.atspkg/contrib/atscntrb-hx-intinf/DATS/intinf_vt.dats: 5161(line=274, offs=13) -- 5162(line=274, offs=14)
 */
-ATSINSmove(tmpret435, arg0) ;
+ATSINSmove(tmpret442, arg0) ;
 /*
 emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/.atspkg/contrib/atscntrb-hx-intinf/DATS/intinf_vt.dats: 5160(line=274, offs=12) -- 5217(line=279, offs=2)
 */
@@ -11512,8 +11749,8 @@
 INSletpop()
 */
 ATSfunbody_end()
-ATSreturn(tmpret435) ;
-} /* end of [ATSCNTRB_056_HX_056_intinf_vt__add_intinf0_int__169] */
+ATSreturn(tmpret442) ;
+} /* end of [ATSCNTRB_056_HX_056_intinf_vt__add_intinf0_int__171] */
 #endif // end of [TEMPLATE]
 
 /*
@@ -11521,7 +11758,7 @@
 */
 /*
 local: 
-global: add_intinf0_int$169$1(level=2)
+global: add_intinf0_int$171$1(level=2)
 local: 
 global: 
 */
@@ -11532,11 +11769,11 @@
 tmpsub = Some()
 */
 atstkind_type(atstype_ptrk)
-ATSCNTRB_056_HX_056_intinf_vt__add_intinf0_int__169__1(atstkind_type(atstype_ptrk) arg0, atstkind_t0ype(atstype_int) arg1)
+ATSCNTRB_056_HX_056_intinf_vt__add_intinf0_int__171__1(atstkind_type(atstype_ptrk) arg0, atstkind_t0ype(atstype_int) arg1)
 {
 /* tmpvardeclst(beg) */
-ATStmpdec(tmpret435__1, atstkind_type(atstype_ptrk)) ;
-// ATStmpdec_void(tmp436__1) ;
+ATStmpdec(tmpret442__1, atstkind_type(atstype_ptrk)) ;
+// ATStmpdec_void(tmp443__1) ;
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
@@ -11552,7 +11789,7 @@
 /*
 emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/.atspkg/contrib/atscntrb-hx-intinf/DATS/intinf_vt.dats: 5184(line=277, offs=10) -- 5212(line=277, offs=38)
 */
-ATSINSmove_void(tmp436__1, atscntrb_gmp_mpz_add2_int(ATSPMVrefarg1(ATSSELrecsin(arg0, atstkind_type(atstype_ptrk), atslab__2)), arg1)) ;
+ATSINSmove_void(tmp443__1, atscntrb_gmp_mpz_add2_int(ATSPMVrefarg1(ATSSELrecsin(arg0, atstkind_type(atstype_ptrk), atslab__2)), arg1)) ;
 
 /*
 letpush(end)
@@ -11561,7 +11798,7 @@
 /*
 emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/.atspkg/contrib/atscntrb-hx-intinf/DATS/intinf_vt.dats: 5161(line=274, offs=13) -- 5162(line=274, offs=14)
 */
-ATSINSmove(tmpret435__1, arg0) ;
+ATSINSmove(tmpret442__1, arg0) ;
 /*
 emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/.atspkg/contrib/atscntrb-hx-intinf/DATS/intinf_vt.dats: 5160(line=274, offs=12) -- 5217(line=279, offs=2)
 */
@@ -11569,8 +11806,8 @@
 INSletpop()
 */
 ATSfunbody_end()
-ATSreturn(tmpret435__1) ;
-} /* end of [ATSCNTRB_056_HX_056_intinf_vt__add_intinf0_int__169__1] */
+ATSreturn(tmpret442__1) ;
+} /* end of [ATSCNTRB_056_HX_056_intinf_vt__add_intinf0_int__171__1] */
 
 /*
 /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/.atspkg/contrib/atscntrb-hx-intinf/DATS/intinf_vt.dats: 2209(line=74, offs=3) -- 2301(line=80, offs=2)
@@ -11670,11 +11907,41 @@
 } /* end of [ATSLIB_056_prelude__ptr_alloc__1__5] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7670(line=282, offs=28) -- 7692(line=283, offs=17)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 8036(line=297, offs=23) -- 8053(line=298, offs=12)
 */
 /*
+local: radical_158$0(level=0)
+global: sqrt_int_48$0(level=0), is_prime_51$0(level=0), rip_136$0(level=0), prime_factors_142$0(level=0), radical_158$0(level=0), radical_ats$175$0(level=0)
+local: 
+global: 
+*/
+ATSextern()
+atstkind_t0ype(atstype_int)
+radical_ats(atstkind_t0ype(atstype_int) arg0)
+{
+/* tmpvardeclst(beg) */
+ATStmpdec(tmpret452, atstkind_t0ype(atstype_int)) ;
+/* tmpvardeclst(end) */
+ATSfunbody_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 8024(line=297, offs=11) -- 8054(line=298, offs=13)
+*/
+ATSINSflab(__patsflab_radical_ats):
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 8044(line=298, offs=3) -- 8053(line=298, offs=12)
+*/
+ATSINSmove(tmpret452, radical_158(arg0)) ;
+
+ATSfunbody_end()
+ATSreturn(tmpret452) ;
+} /* end of [radical_ats] */
+
+/*
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 8083(line=300, offs=28) -- 8105(line=301, offs=17)
+*/
+/*
 local: sum_divisors_127$0(level=0)
-global: sqrt_int_48$0(level=0), sum_divisors_127$0(level=0), sum_divisors_ats$173$0(level=0)
+global: sqrt_int_48$0(level=0), sum_divisors_127$0(level=0), sum_divisors_ats$176$0(level=0)
 local: 
 global: 
 */
@@ -11683,28 +11950,28 @@
 sum_divisors_ats(atstkind_t0ype(atstype_int) arg0)
 {
 /* tmpvardeclst(beg) */
-ATStmpdec(tmpret445, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmpret453, atstkind_t0ype(atstype_int)) ;
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7653(line=282, offs=11) -- 7693(line=283, offs=18)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 8066(line=300, offs=11) -- 8106(line=301, offs=18)
 */
 ATSINSflab(__patsflab_sum_divisors_ats):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7678(line=283, offs=3) -- 7692(line=283, offs=17)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 8091(line=301, offs=3) -- 8105(line=301, offs=17)
 */
-ATSINSmove(tmpret445, sum_divisors_127(arg0)) ;
+ATSINSmove(tmpret453, sum_divisors_127(arg0)) ;
 
 ATSfunbody_end()
-ATSreturn(tmpret445) ;
+ATSreturn(tmpret453) ;
 } /* end of [sum_divisors_ats] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7724(line=285, offs=30) -- 7748(line=286, offs=19)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 8137(line=303, offs=30) -- 8161(line=304, offs=19)
 */
 /*
 local: count_divisors_122$0(level=0)
-global: sqrt_int_48$0(level=0), divisors_67$0(level=0), count_divisors_122$0(level=0), count_divisors_ats$174$0(level=0)
+global: sqrt_int_48$0(level=0), divisors_67$0(level=0), count_divisors_122$0(level=0), count_divisors_ats$177$0(level=0)
 local: 
 global: 
 */
@@ -11713,28 +11980,28 @@
 count_divisors_ats(atstkind_t0ype(atstype_int) arg0)
 {
 /* tmpvardeclst(beg) */
-ATStmpdec(tmpret446, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmpret454, atstkind_t0ype(atstype_int)) ;
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7705(line=285, offs=11) -- 7749(line=286, offs=20)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 8118(line=303, offs=11) -- 8162(line=304, offs=20)
 */
 ATSINSflab(__patsflab_count_divisors_ats):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7732(line=286, offs=3) -- 7748(line=286, offs=19)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 8145(line=304, offs=3) -- 8161(line=304, offs=19)
 */
-ATSINSmove(tmpret446, count_divisors_122(arg0)) ;
+ATSINSmove(tmpret454, count_divisors_122(arg0)) ;
 
 ATSfunbody_end()
-ATSreturn(tmpret446) ;
+ATSreturn(tmpret454) ;
 } /* end of [count_divisors_ats] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7773(line=288, offs=23) -- 7790(line=289, offs=12)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 8186(line=306, offs=23) -- 8203(line=307, offs=12)
 */
 /*
-local: totient_158$0(level=0)
-global: sqrt_int_48$0(level=0), is_prime_51$0(level=0), rip_136$0(level=0), prime_factors_142$0(level=0), totient_158$0(level=0), totient_ats$175$0(level=0)
+local: totient_160$0(level=0)
+global: sqrt_int_48$0(level=0), is_prime_51$0(level=0), rip_136$0(level=0), prime_factors_142$0(level=0), totient_160$0(level=0), totient_ats$178$0(level=0)
 local: 
 global: 
 */
@@ -11743,28 +12010,28 @@
 totient_ats(atstkind_t0ype(atstype_int) arg0)
 {
 /* tmpvardeclst(beg) */
-ATStmpdec(tmpret447, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmpret455, atstkind_t0ype(atstype_int)) ;
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7761(line=288, offs=11) -- 7791(line=289, offs=13)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 8174(line=306, offs=11) -- 8204(line=307, offs=13)
 */
 ATSINSflab(__patsflab_totient_ats):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7781(line=289, offs=3) -- 7790(line=289, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 8194(line=307, offs=3) -- 8203(line=307, offs=12)
 */
-ATSINSmove(tmpret447, totient_158(arg0)) ;
+ATSINSmove(tmpret455, totient_160(arg0)) ;
 
 ATSfunbody_end()
-ATSreturn(tmpret447) ;
+ATSreturn(tmpret455) ;
 } /* end of [totient_ats] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7820(line=291, offs=28) -- 7842(line=292, offs=17)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 8233(line=309, offs=28) -- 8255(line=310, offs=17)
 */
 /*
 local: little_omega_153$0(level=0)
-global: sqrt_int_48$0(level=0), is_prime_51$0(level=0), rip_136$0(level=0), little_omega_153$0(level=0), little_omega_ats$176$0(level=0)
+global: sqrt_int_48$0(level=0), is_prime_51$0(level=0), rip_136$0(level=0), little_omega_153$0(level=0), little_omega_ats$179$0(level=0)
 local: 
 global: 
 */
@@ -11773,28 +12040,28 @@
 little_omega_ats(atstkind_t0ype(atstype_int) arg0)
 {
 /* tmpvardeclst(beg) */
-ATStmpdec(tmpret448, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmpret456, atstkind_t0ype(atstype_int)) ;
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7803(line=291, offs=11) -- 7843(line=292, offs=18)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 8216(line=309, offs=11) -- 8256(line=310, offs=18)
 */
 ATSINSflab(__patsflab_little_omega_ats):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7828(line=292, offs=3) -- 7842(line=292, offs=17)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 8241(line=310, offs=3) -- 8255(line=310, offs=17)
 */
-ATSINSmove(tmpret448, little_omega_153(arg0)) ;
+ATSINSmove(tmpret456, little_omega_153(arg0)) ;
 
 ATSfunbody_end()
-ATSreturn(tmpret448) ;
+ATSreturn(tmpret456) ;
 } /* end of [little_omega_ats] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7870(line=294, offs=26) -- 7890(line=295, offs=15)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 8283(line=312, offs=26) -- 8303(line=313, offs=15)
 */
 /*
 local: is_perfect_134$0(level=0)
-global: sqrt_int_48$0(level=0), sum_divisors_127$0(level=0), is_perfect_134$0(level=0), is_perfect_ats$177$0(level=0)
+global: sqrt_int_48$0(level=0), sum_divisors_127$0(level=0), is_perfect_134$0(level=0), is_perfect_ats$180$0(level=0)
 local: 
 global: 
 */
@@ -11803,28 +12070,28 @@
 is_perfect_ats(atstkind_t0ype(atstype_int) arg0)
 {
 /* tmpvardeclst(beg) */
-ATStmpdec(tmpret449, atstkind_t0ype(atstype_bool)) ;
+ATStmpdec(tmpret457, atstkind_t0ype(atstype_bool)) ;
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7855(line=294, offs=11) -- 7891(line=295, offs=16)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 8268(line=312, offs=11) -- 8304(line=313, offs=16)
 */
 ATSINSflab(__patsflab_is_perfect_ats):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7878(line=295, offs=3) -- 7890(line=295, offs=15)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 8291(line=313, offs=3) -- 8303(line=313, offs=15)
 */
-ATSINSmove(tmpret449, is_perfect_134(arg0)) ;
+ATSINSmove(tmpret457, is_perfect_134(arg0)) ;
 
 ATSfunbody_end()
-ATSreturn(tmpret449) ;
+ATSreturn(tmpret457) ;
 } /* end of [is_perfect_ats] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7914(line=297, offs=22) -- 7947(line=298, offs=25)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 8327(line=315, offs=22) -- 8360(line=316, offs=25)
 */
 /*
 local: jacobi_105$0(level=0)
-global: exp_5$0(level=0), sqrt_int_48$0(level=0), is_prime_51$0(level=0), div_gt_zero_98$0(level=0), exp_mod_prime_99$0(level=0), jacobi_105$0(level=0), jacobi_ats$178$0(level=0)
+global: exp_5$0(level=0), sqrt_int_48$0(level=0), is_prime_51$0(level=0), div_gt_zero_98$0(level=0), exp_mod_prime_99$0(level=0), jacobi_105$0(level=0), jacobi_ats$181$0(level=0)
 local: 
 global: 
 */
@@ -11833,28 +12100,28 @@
 jacobi_ats(atstkind_t0ype(atstype_int) arg0, atstkind_t0ype(atstype_int) arg1)
 {
 /* tmpvardeclst(beg) */
-ATStmpdec(tmpret450, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmpret458, atstkind_t0ype(atstype_int)) ;
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7903(line=297, offs=11) -- 7947(line=298, offs=25)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 8316(line=315, offs=11) -- 8360(line=316, offs=25)
 */
 ATSINSflab(__patsflab_jacobi_ats):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7925(line=298, offs=3) -- 7947(line=298, offs=25)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 8338(line=316, offs=3) -- 8360(line=316, offs=25)
 */
-ATSINSmove(tmpret450, jacobi_105(arg0, ATSPMVcastfn(cast, atstkind_t0ype(atstype_int), arg1))) ;
+ATSINSmove(tmpret458, jacobi_105(arg0, ATSPMVcastfn(cast, atstkind_t0ype(atstype_int), arg1))) ;
 
 ATSfunbody_end()
-ATSreturn(tmpret450) ;
+ATSreturn(tmpret458) ;
 } /* end of [jacobi_ats] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7975(line=300, offs=27) -- 7996(line=301, offs=16)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 8388(line=318, offs=27) -- 8409(line=319, offs=16)
 */
 /*
-local: totient_sum_166$0(level=0)
-global: sqrt_int_48$0(level=0), is_prime_51$0(level=0), rip_136$0(level=0), prime_factors_142$0(level=0), totient_158$0(level=0), totient_sum_166$0(level=0), totient_sum_ats$179$0(level=0)
+local: totient_sum_168$0(level=0)
+global: sqrt_int_48$0(level=0), is_prime_51$0(level=0), rip_136$0(level=0), prime_factors_142$0(level=0), totient_160$0(level=0), totient_sum_168$0(level=0), totient_sum_ats$182$0(level=0)
 local: 
 global: 
 */
@@ -11863,28 +12130,28 @@
 totient_sum_ats(atstkind_t0ype(atstype_int) arg0)
 {
 /* tmpvardeclst(beg) */
-ATStmpdec(tmpret451, atstkind_type(atstype_ptrk)) ;
+ATStmpdec(tmpret459, atstkind_type(atstype_ptrk)) ;
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7959(line=300, offs=11) -- 7997(line=301, offs=17)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 8372(line=318, offs=11) -- 8410(line=319, offs=17)
 */
 ATSINSflab(__patsflab_totient_sum_ats):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 7983(line=301, offs=3) -- 7996(line=301, offs=16)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 8396(line=319, offs=3) -- 8409(line=319, offs=16)
 */
-ATSINSmove(tmpret451, totient_sum_166(arg0)) ;
+ATSINSmove(tmpret459, totient_sum_168(arg0)) ;
 
 ATSfunbody_end()
-ATSreturn(tmpret451) ;
+ATSreturn(tmpret459) ;
 } /* end of [totient_sum_ats] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 8021(line=303, offs=23) -- 8048(line=304, offs=19)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 8434(line=321, offs=23) -- 8461(line=322, offs=19)
 */
 /*
 local: is_coprime_65$0(level=0)
-global: gcd_61$0(level=0), is_coprime_65$0(level=0), coprime_ats$180$0(level=0)
+global: gcd_61$0(level=0), is_coprime_65$0(level=0), coprime_ats$183$0(level=0)
 local: 
 global: 
 */
@@ -11893,20 +12160,20 @@
 coprime_ats(atstkind_t0ype(atstype_int) arg0, atstkind_t0ype(atstype_int) arg1)
 {
 /* tmpvardeclst(beg) */
-ATStmpdec(tmpret452, atstkind_t0ype(atstype_bool)) ;
+ATStmpdec(tmpret460, atstkind_t0ype(atstype_bool)) ;
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 8009(line=303, offs=11) -- 8048(line=304, offs=19)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 8422(line=321, offs=11) -- 8461(line=322, offs=19)
 */
 ATSINSflab(__patsflab_coprime_ats):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 8032(line=304, offs=3) -- 8048(line=304, offs=19)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/number-theory.dats: 8445(line=322, offs=3) -- 8461(line=322, offs=19)
 */
-ATSINSmove(tmpret452, is_coprime_65(arg0, arg1)) ;
+ATSINSmove(tmpret460, is_coprime_65(arg0, arg1)) ;
 
 ATSfunbody_end()
-ATSreturn(tmpret452) ;
+ATSreturn(tmpret460) ;
 } /* end of [coprime_ats] */
 
 /*
diff --git a/cbits/numerics.c b/cbits/numerics.c
--- a/cbits/numerics.c
+++ b/cbits/numerics.c
@@ -324,12 +324,14 @@
 staload-prologues(end)
 */
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/numerics.dats: 204(line=9, offs=1) -- 343(line=13, offs=3)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/numerics.dats: 204(line=9, offs=1) -- 375(line=15, offs=3)
 */
 ATSextcode_beg()
-#define ATS_MEMALLOC_LIBC
+#ifndef LIBRARY_BUILD
+#define ATS_MEMALLOC_LIBC *)
 #include "ccomp/runtime/pats_ccomp_memalloc_libc.h"
 #include "ccomp/runtime/pats_ccomp_runtime_memalloc.c"
+#endif
 ATSextcode_end()
 /*
 typedefs-for-tyrecs-and-tysums(beg)
@@ -3363,7 +3365,7 @@
 } /* end of [ATSLIB_056_prelude__eq_g0int_int__12__4] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/numerics.dats: 368(line=15, offs=24) -- 386(line=16, offs=13)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/numerics.dats: 400(line=17, offs=24) -- 418(line=18, offs=13)
 */
 /*
 local: is_prime_51$0(level=0)
@@ -3380,11 +3382,11 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/numerics.dats: 355(line=15, offs=11) -- 387(line=16, offs=14)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/numerics.dats: 387(line=17, offs=11) -- 419(line=18, offs=14)
 */
 ATSINSflab(__patsflab_is_prime_ats):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/numerics.dats: 376(line=16, offs=3) -- 386(line=16, offs=13)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/numerics.dats: 408(line=18, offs=3) -- 418(line=18, offs=13)
 */
 ATSINSmove(tmpret127, is_prime_51(arg0)) ;
 
@@ -3393,7 +3395,7 @@
 } /* end of [is_prime_ats] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/numerics.dats: 407(line=18, offs=19) -- 427(line=19, offs=12)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/numerics.dats: 439(line=20, offs=19) -- 459(line=21, offs=12)
 */
 /*
 local: exp_5$0(level=0)
@@ -3410,11 +3412,11 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/numerics.dats: 399(line=18, offs=11) -- 427(line=19, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/numerics.dats: 431(line=20, offs=11) -- 459(line=21, offs=12)
 */
 ATSINSflab(__patsflab_exp_ats):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/numerics.dats: 418(line=19, offs=3) -- 427(line=19, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/numerics.dats: 450(line=21, offs=3) -- 459(line=21, offs=12)
 */
 ATSINSmove(tmpret128, exp_5(arg0, arg1)) ;
 
diff --git a/fast-arithmetic.cabal b/fast-arithmetic.cabal
--- a/fast-arithmetic.cabal
+++ b/fast-arithmetic.cabal
@@ -1,6 +1,6 @@
 cabal-version: 1.18
 name: fast-arithmetic
-version: 0.6.1.1
+version: 0.6.2.0
 license: BSD3
 license-file: LICENSE
 copyright: Copyright: (c) 2018 Vanessa McHale
@@ -8,6 +8,7 @@
 author: Vanessa McHale
 tested-with: ghc ==7.0.4 ghc ==7.2.2 ghc ==7.4.2 ghc ==7.6.3
              ghc ==7.8.4 ghc ==7.10.3 ghc ==8.0.2 ghc ==8.2.2 ghc ==8.4.3
+             ghc ==8.6.1
 bug-reports: https://github.com/vmchale/hs-ats/issues
 synopsis: Fast functions on integers.
 description:
diff --git a/lib.dhall b/lib.dhall
--- a/lib.dhall
+++ b/lib.dhall
@@ -1,2 +1,1 @@
-λ(icc : Bool) →
-    { sourceBld = False, withBench = True, icc = icc }
+{ sourceBld = False, withBench = True }
diff --git a/source.dhall b/source.dhall
--- a/source.dhall
+++ b/source.dhall
@@ -1,1 +1,1 @@
-{ sourceBld = True, withBench = False, icc = False }
+{ sourceBld = True, withBench = False }
diff --git a/src/Numeric/NumberTheory.hs b/src/Numeric/NumberTheory.hs
--- a/src/Numeric/NumberTheory.hs
+++ b/src/Numeric/NumberTheory.hs
@@ -22,6 +22,11 @@
 foreign import ccall unsafe little_omega_ats :: CInt -> CInt
 foreign import ccall unsafe is_perfect_ats :: CInt -> CUChar
 foreign import ccall unsafe is_prime_ats :: CInt -> CUChar
+foreign import ccall unsafe radical_ats :: CInt -> CInt
+
+-- | Radical of an integer
+radical :: Int -> Int
+radical = conjugate radical_ats
 
 -- | \( O(\sqrt(n)) \)
 isPrime :: Int -> Bool
diff --git a/test/Spec.hs b/test/Spec.hs
--- a/test/Spec.hs
+++ b/test/Spec.hs
@@ -29,7 +29,7 @@
 tooBig x y = go x y >= 2 ^ (16 :: Integer)
     where
         go :: Int -> Int -> Integer
-        go m n = fromIntegral m ^ (fromIntegral n :: Integer)
+        go m n = fromIntegral m ^ n
 
 agreeL :: (Eq a, Show b, Integral b, Arbitrary b) => b -> String -> (b -> a) -> (b -> a) -> SpecWith ()
 agreeL lower s f g = describe s $
