diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # fast-arithmetic
 
+## 0.6.4.1
+
+  * Use `hgmp` internally
+
 ## 0.6.4.0
 
   * Add `bell` to the ATS library
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright Vanessa McHale (c) 2017
+Copyright Vanessa McHale (c) 2017-2018
 
 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -17,26 +17,30 @@
 
 | Computation | Version (ATS/Haskell) | Time |
 | ----------- | --------------------- | ---- |
-| `isPrime 2017` | ATS | 117.1 ns |
-| `isPrime 2017` | Haskell | 426.4 ns |
-| `φ(2016)` | ATS | 190.9 ns |
-| `φ(2016)` | Haskell | 356.9 ns |
-| `τ(3018)` | ATS | 340.8 ns |
-| `τ(3018)` | Haskell | 659.0 ns |
-| `σ(115)` | ATS | 41.27 ns |
-| `σ(115)` | Haskell | 314.1 ns |
-| `ω(91)` | ATS | 64.67 ns |
-| `ω(91)` | Haskell | 332.0 ns |
-| `160!` | ATS | 4.303 μs |
-| `160!` | Haskell | 5.659 μs |
-| `79!!` | ATS | 941.2 ns |
-| `79!!` | Haskell | 1.267 μs |
-| ``322 `choose` 16`` | ATS | 557.5 ns |
-| ``322 `choose` 16`` | Haskell | 996.3 ns |
-| `catalan 300` | ATS | 18.15 μs |
-| `catalan 300` | Haskell | 29.08 μs |
-| `permutations 20 10` | ATS | 198.6 ns |
-| `permutations 20 10` | Haskell | 392.3 ns |
+| `isPrime 2017` | ATS | 117.2 ns |
+| `isPrime 2017` | Haskell | 425.0 ns |
+| `φ(2016)` | ATS | 191.5 ns |
+| `φ(2016)` | Haskell | 384.8 ns |
+| `τ(3018)` | ATS | 337.0 ns |
+| `τ(3018)` | Haskell | 660.2 ns |
+| `σ(115)` | ATS | 45.41 ns |
+| `σ(115)` | Haskell | 322.4 ns |
+| `ω(91)` | ATS | 65.52 ns |
+| `ω(91)` | Haskell | 345.2 ns |
+| `160!` | ATS | 2.363 μs |
+| `160!` | Haskell | 6.134μs |
+| `79!!` | ATS | 556.2 ns |
+| `79!!` | Haskell | 1.355 μs |
+| ``322 `choose` 16`` | ATS | 467.6 ns |
+| ``322 `choose` 16`` | Haskell | 956.7 ns |
+| `catalan 300` | ATS | 13.74 μs |
+| `catalan 300` | Haskell | 28.76 μs |
+| `permutations 20 10` | ATS | 202.8 ns |
+| `permutations 20 10` | Haskell | 362.6 ns |
+| `maxRegions 45000` | ATS | 624.1 ns |
+| `maxRegions 45000` | Haskell | 1.064 μs |
+| `stirling2 25 8` | ATS | 3.108 μs |
+| `stirling2 25 8` | Haskell | 9.494 μs |
 
 ## Building
 
diff --git a/ats-src/bench.dats b/ats-src/bench.dats
--- a/ats-src/bench.dats
+++ b/ats-src/bench.dats
@@ -5,7 +5,6 @@
 #include "ats-src/combinatorics.dats"
 #include "$PATSHOMELOCS/ats-bench-0.3.3/bench.dats"
 
-// TODO: bench dernangements
 fn factorial_bench() : void =
   {
     val x = fact(160)
@@ -42,12 +41,19 @@
     val () = intinf_free(x)
   }
 
+fn derangement_bench() : void =
+  {
+    val x = derangements(35)
+    val () = intinf_free(x)
+  }
+
 val factorial_delay: io = lam () => factorial_bench()
 val double_factorial_delay: io = lam () => double_factorial_bench()
 val choose_delay: io = lam () => double_factorial_bench()
 val catalan_delay: io = lam () => catalan_bench()
 val permutations_delay: io = lam () => permutations_bench()
 val bell_delay: io = lam () => bell_bench()
+val derangement_delay: io = lam () => derangement_bench()
 
 implement main0 () =
   {
@@ -61,4 +67,5 @@
     val () = print_slope("catalan", 9, catalan_delay)
     val () = print_slope("permutations", 13, permutations_delay)
     val () = print_slope("bell", 8, bell_delay)
+    val () = print_slope("derangements", 12, derangement_delay)
   }
diff --git a/ats-src/combinatorics.dats b/ats-src/combinatorics.dats
--- a/ats-src/combinatorics.dats
+++ b/ats-src/combinatorics.dats
@@ -8,9 +8,7 @@
 staload UN = "prelude/SATS/unsafe.sats"
 staload "ats-src/combinatorics.sats"
 
-// See [here](http://mathworld.wolfram.com/Derangement.html). I'm not sure how
-// fast this is, but it *seems* to be faster than the Haskell version so that's
-// good.
+// See [here](http://mathworld.wolfram.com/Derangement.html).
 fn derangements {n:nat} .<n>. (n : int(n)) : Intinf =
   let
     fun loop { n : nat | n > 1 }{ i : nat | i <= n } .<n-i>. (n : int(n), i : int(i), n1 : Intinf, n2 : Intinf) : Intinf =
@@ -113,7 +111,7 @@
         var z = div_intinf0_intinf1(x, y)
         val _ = intinf_free(y)
       in
-        $UN.castvwtp0(z)
+        z
       end
   end
 
@@ -143,7 +141,7 @@
         var z = div_intinf0_intinf1(x, y)
         val _ = intinf_free(y)
       in
-        $UN.castvwtp0(z)
+        z
       end
   end
 
diff --git a/atspkg.dhall b/atspkg.dhall
--- a/atspkg.dhall
+++ b/atspkg.dhall
@@ -101,7 +101,7 @@
         , ccompiler = prelude.printCompiler cc
         , debPkg = prelude.mkDeb
             (prelude.debian "fast-arithmetic" ⫽
-                { version = [0,6,4,0]
+                { version = [0,6,4,1]
                 , maintainer = "Vanessa McHale <vamchale@gmail.com>"
                 , description = "Library for fast arithmetic in ATS"
                 , libraries = [ "${prelude.atsProject}/libnumbertheory.a" ]
diff --git a/bench/Bench.hs b/bench/Bench.hs
--- a/bench/Bench.hs
+++ b/bench/Bench.hs
@@ -15,7 +15,7 @@
     where up = floor (sqrt (fromIntegral x :: Double))
 
 hsMaxRegions :: Int -> Integer
-hsMaxRegions n = sum $ fmap (n `choose`) [0..4]
+hsMaxRegions n = sum $ fmap (n `Ext.binomial`) [0..4]
 
 main :: IO ()
 main =
@@ -64,7 +64,7 @@
                       , bench "hsMaxRegions" $ nf hsMaxRegions 45000
                       ]
                 , bgroup "stirling"
-                      [ bench "striling2" $ nf (stirling2 25) 8
+                      [ bench "stirling2" $ nf (stirling2 25) 8
                       , bench "Ext.stirling2nd" $ nf (Ext.stirling2nd (25 :: Int)) 8
                       ]
                 ]
diff --git a/cbits/combinatorics.c b/cbits/combinatorics.c
--- a/cbits/combinatorics.c
+++ b/cbits/combinatorics.c
@@ -953,7 +953,7 @@
 #endif // end of [QUALIFIED]
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 494(line=14, offs=4) -- 1192(line=38, offs=6)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 388(line=12, offs=4) -- 1086(line=36, offs=6)
 */
 /*
 local: 
@@ -973,11 +973,11 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 494(line=14, offs=4) -- 1192(line=38, offs=6)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 388(line=12, offs=4) -- 1086(line=36, offs=6)
 */
 ATSINSflab(__patsflab_derangements_0):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 547(line=15, offs=3) -- 1192(line=38, offs=6)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 441(line=13, offs=3) -- 1086(line=36, offs=6)
 */
 /*
 letpush(beg)
@@ -987,7 +987,7 @@
 */
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1034(line=33, offs=5) -- 1186(line=37, offs=59)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 928(line=31, offs=5) -- 1080(line=35, offs=59)
 */
 ATScaseof_beg()
 /*
@@ -995,15 +995,15 @@
 */
 ATSbranch_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1053(line=34, offs=9) -- 1054(line=34, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 947(line=32, offs=9) -- 948(line=32, offs=10)
 */
 ATSINSlab(__atstmplab0):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 522(line=14, offs=32) -- 523(line=14, offs=33)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 416(line=12, offs=32) -- 417(line=12, offs=33)
 */
 ATSifnthen(ATSCKpat_int(arg0, ATSPMVint(0))) { ATSINSgoto(__atstmplab2) ; } ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1054(line=34, offs=10) -- 1054(line=34, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 948(line=32, offs=10) -- 948(line=32, offs=10)
 */
 ATSINSlab(__atstmplab1):
 /*
@@ -1013,7 +1013,7 @@
 ibranch-mbody:
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1058(line=34, offs=14) -- 1071(line=34, offs=27)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 952(line=32, offs=14) -- 965(line=32, offs=27)
 */
 ATSINSmove(tmpret0, ATSCNTRB_056_HX_056_intinf_vt__intinf_make_int__15__1(ATSPMVi0nt(1))) ;
 
@@ -1021,15 +1021,15 @@
 
 ATSbranch_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1080(line=35, offs=9) -- 1081(line=35, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 974(line=33, offs=9) -- 975(line=33, offs=10)
 */
 ATSINSlab(__atstmplab2):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 522(line=14, offs=32) -- 523(line=14, offs=33)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 416(line=12, offs=32) -- 417(line=12, offs=33)
 */
 ATSifnthen(ATSCKpat_int(arg0, ATSPMVint(1))) { ATSINSgoto(__atstmplab4) ; } ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1081(line=35, offs=10) -- 1081(line=35, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 975(line=33, offs=10) -- 975(line=33, offs=10)
 */
 ATSINSlab(__atstmplab3):
 /*
@@ -1039,7 +1039,7 @@
 ibranch-mbody:
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1086(line=35, offs=15) -- 1099(line=35, offs=28)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 980(line=33, offs=15) -- 993(line=33, offs=28)
 */
 ATSINSmove(tmpret0, ATSCNTRB_056_HX_056_intinf_vt__intinf_make_int__15__2(ATSPMVi0nt(0))) ;
 
@@ -1047,15 +1047,15 @@
 
 ATSbranch_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1108(line=36, offs=9) -- 1109(line=36, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1002(line=34, offs=9) -- 1003(line=34, offs=10)
 */
 ATSINSlab(__atstmplab4):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 522(line=14, offs=32) -- 523(line=14, offs=33)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 416(line=12, offs=32) -- 417(line=12, offs=33)
 */
 ATSifnthen(ATSCKpat_int(arg0, ATSPMVint(2))) { ATSINSgoto(__atstmplab6) ; } ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1109(line=36, offs=10) -- 1109(line=36, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1003(line=34, offs=10) -- 1003(line=34, offs=10)
 */
 ATSINSlab(__atstmplab5):
 /*
@@ -1065,7 +1065,7 @@
 ibranch-mbody:
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1114(line=36, offs=15) -- 1127(line=36, offs=28)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1008(line=34, offs=15) -- 1021(line=34, offs=28)
 */
 ATSINSmove(tmpret0, ATSCNTRB_056_HX_056_intinf_vt__intinf_make_int__15__3(ATSPMVi0nt(1))) ;
 
@@ -1073,7 +1073,7 @@
 
 ATSbranch_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1137(line=37, offs=10) -- 1137(line=37, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1031(line=35, offs=10) -- 1031(line=35, offs=10)
 */
 ATSINSlab(__atstmplab6):
 /*
@@ -1083,22 +1083,22 @@
 ibranch-mbody:
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1147(line=37, offs=20) -- 1152(line=37, offs=25)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1041(line=35, offs=20) -- 1046(line=35, offs=25)
 */
 ATSINSmove(tmp45, atspre_g1int_sub_int(arg0, ATSPMVi0nt(1))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1157(line=37, offs=30) -- 1170(line=37, offs=43)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1051(line=35, offs=30) -- 1064(line=35, offs=43)
 */
 ATSINSmove(tmp46, ATSCNTRB_056_HX_056_intinf_vt__intinf_make_int__15__4(ATSPMVi0nt(1))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1172(line=37, offs=45) -- 1185(line=37, offs=58)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1066(line=35, offs=45) -- 1079(line=35, offs=58)
 */
 ATSINSmove(tmp51, ATSCNTRB_056_HX_056_intinf_vt__intinf_make_int__15__5(ATSPMVi0nt(0))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1142(line=37, offs=15) -- 1186(line=37, offs=59)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1036(line=35, offs=15) -- 1080(line=35, offs=59)
 */
 ATSINSmove(tmpret0, loop_1(tmp45, ATSPMVi0nt(2), tmp46, tmp51)) ;
 
@@ -1110,7 +1110,7 @@
 ATScaseof_end()
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 547(line=15, offs=3) -- 1192(line=38, offs=6)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 441(line=13, offs=3) -- 1086(line=36, offs=6)
 */
 /*
 INSletpop()
@@ -1120,7 +1120,7 @@
 } /* end of [derangements_0] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 559(line=16, offs=9) -- 1024(line=31, offs=12)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 453(line=14, offs=9) -- 918(line=29, offs=12)
 */
 /*
 local: loop_1$0(level=1)
@@ -1148,45 +1148,45 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 559(line=16, offs=9) -- 1024(line=31, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 453(line=14, offs=9) -- 918(line=29, offs=12)
 */
 ATSINSflab(__patsflab_loop_1):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 683(line=17, offs=10) -- 688(line=17, offs=15)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 577(line=15, offs=10) -- 582(line=15, offs=15)
 */
 ATSINSmove(tmp2, ATSLIB_056_prelude__lt_g1int_int__2__1(arg1, arg0)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 680(line=17, offs=7) -- 1024(line=31, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 574(line=15, offs=7) -- 918(line=29, offs=12)
 */
 ATSif(
 tmp2
 ) ATSthen() {
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 702(line=18, offs=9) -- 846(line=23, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 596(line=16, offs=9) -- 740(line=21, offs=12)
 */
 /*
 letpush(beg)
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 720(line=19, offs=15) -- 721(line=19, offs=16)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 614(line=17, offs=15) -- 615(line=17, offs=16)
 */
 /*
 ATSINStmpdec(tmpref7) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 724(line=19, offs=19) -- 751(line=19, offs=46)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 618(line=17, offs=19) -- 645(line=17, offs=46)
 */
 ATSINSmove(tmpref7, ATSCNTRB_056_HX_056_intinf_vt__add_intinf0_intinf1__6__1(arg3, ATSPMVrefarg0(arg2))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 766(line=20, offs=15) -- 767(line=20, offs=16)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 660(line=18, offs=15) -- 661(line=18, offs=16)
 */
 /*
 ATSINStmpdec(tmpref12) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 770(line=20, offs=19) -- 791(line=20, offs=40)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 664(line=18, offs=19) -- 685(line=18, offs=40)
 */
 ATSINSmove(tmpref12, ATSCNTRB_056_HX_056_intinf_vt__mul_intinf0_int__8__1(tmpref7, arg1)) ;
 
@@ -1195,12 +1195,12 @@
 */
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 821(line=22, offs=19) -- 826(line=22, offs=24)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 715(line=20, offs=19) -- 720(line=20, offs=24)
 */
 ATSINSmove(tmp17, atspre_g1int_add_int(arg1, ATSPMVi0nt(1))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 813(line=22, offs=11) -- 834(line=22, offs=32)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 707(line=20, offs=11) -- 728(line=20, offs=32)
 */
 ATStailcal_beg()
 ATSINSmove_tlcal(apy0, arg0) ;
@@ -1215,42 +1215,42 @@
 ATStailcal_end()
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 702(line=18, offs=9) -- 846(line=23, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 596(line=16, offs=9) -- 740(line=21, offs=12)
 */
 /*
 INSletpop()
 */
 } ATSelse() {
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 866(line=25, offs=9) -- 1024(line=31, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 760(line=23, offs=9) -- 918(line=29, offs=12)
 */
 /*
 letpush(beg)
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 884(line=26, offs=15) -- 885(line=26, offs=16)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 778(line=24, offs=15) -- 779(line=24, offs=16)
 */
 /*
 ATSINStmpdec(tmpref18) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 888(line=26, offs=19) -- 915(line=26, offs=46)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 782(line=24, offs=19) -- 809(line=24, offs=46)
 */
 ATSINSmove(tmpref18, ATSCNTRB_056_HX_056_intinf_vt__add_intinf0_intinf1__6__2(arg3, ATSPMVrefarg0(arg2))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 934(line=27, offs=19) -- 948(line=27, offs=33)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 828(line=25, offs=19) -- 842(line=25, offs=33)
 */
 ATSINSmove_void(tmp21, ATSCNTRB_056_HX_056_intinf_vt__intinf_free__12__1(arg2)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 964(line=28, offs=15) -- 965(line=28, offs=16)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 858(line=26, offs=15) -- 859(line=26, offs=16)
 */
 /*
 ATSINStmpdec(tmpref26) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 968(line=28, offs=19) -- 989(line=28, offs=40)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 862(line=26, offs=19) -- 883(line=26, offs=40)
 */
 ATSINSmove(tmpref26, ATSCNTRB_056_HX_056_intinf_vt__mul_intinf0_int__8__2(tmpref18, arg1)) ;
 
@@ -1259,11 +1259,11 @@
 */
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1011(line=30, offs=11) -- 1012(line=30, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 905(line=28, offs=11) -- 906(line=28, offs=12)
 */
 ATSINSmove(tmpret1, tmpref26) ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 866(line=25, offs=9) -- 1024(line=31, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 760(line=23, offs=9) -- 918(line=29, offs=12)
 */
 /*
 INSletpop()
@@ -2402,7 +2402,7 @@
 } /* end of [ATSLIB_056_prelude__ptr_alloc__17__5] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1198(line=40, offs=5) -- 1476(line=48, offs=8)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1092(line=38, offs=5) -- 1370(line=46, offs=8)
 */
 /*
 local: fact_ref_28$0(level=0)
@@ -2424,11 +2424,11 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1198(line=40, offs=5) -- 1476(line=48, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1092(line=38, offs=5) -- 1370(line=46, offs=8)
 */
 ATSINSflab(__patsflab_fact_ref_28):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1283(line=41, offs=3) -- 1476(line=48, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1177(line=39, offs=3) -- 1370(line=46, offs=8)
 */
 ATScaseof_beg()
 /*
@@ -2436,15 +2436,15 @@
 */
 ATSbranch_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1300(line=42, offs=7) -- 1301(line=42, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1194(line=40, offs=7) -- 1195(line=40, offs=8)
 */
 ATSINSlab(__atstmplab7):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1222(line=40, offs=29) -- 1223(line=40, offs=30)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1116(line=38, offs=29) -- 1117(line=38, offs=30)
 */
 ATSifnthen(ATSCKpat_int(arg0, ATSPMVint(0))) { ATSINSgoto(__atstmplab9) ; } ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1301(line=42, offs=8) -- 1301(line=42, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1195(line=40, offs=8) -- 1195(line=40, offs=8)
 */
 ATSINSlab(__atstmplab8):
 /*
@@ -2454,31 +2454,31 @@
 ibranch-mbody:
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1312(line=42, offs=19) -- 1325(line=42, offs=32)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1206(line=40, offs=19) -- 1219(line=40, offs=32)
 */
 ATSINSmove(tmp57, ATSCNTRB_056_HX_056_intinf_vt__intinf_make_int__15__6(ATSPMVi0nt(1))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1305(line=42, offs=12) -- 1325(line=42, offs=32)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1199(line=40, offs=12) -- 1219(line=40, offs=32)
 */
 ATSINSstore(ATSderef(arg1, atstkind_type(atstype_ptrk)), tmp57) ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1305(line=42, offs=12) -- 1325(line=42, offs=32)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1199(line=40, offs=12) -- 1219(line=40, offs=32)
 */
 ATSINSmove_void(tmpret56, ATSPMVempty()) ;
 ATSbranch_end()
 
 ATSbranch_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1332(line=43, offs=7) -- 1333(line=43, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1226(line=41, offs=7) -- 1227(line=41, offs=8)
 */
 ATSINSlab(__atstmplab9):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1222(line=40, offs=29) -- 1223(line=40, offs=30)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1116(line=38, offs=29) -- 1117(line=38, offs=30)
 */
 ATSifnthen(ATSCKpat_int(arg0, ATSPMVint(1))) { ATSINSgoto(__atstmplab11) ; } ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1333(line=43, offs=8) -- 1333(line=43, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1227(line=41, offs=8) -- 1227(line=41, offs=8)
 */
 ATSINSlab(__atstmplab10):
 /*
@@ -2488,23 +2488,23 @@
 ibranch-mbody:
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1344(line=43, offs=19) -- 1357(line=43, offs=32)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1238(line=41, offs=19) -- 1251(line=41, offs=32)
 */
 ATSINSmove(tmp62, ATSCNTRB_056_HX_056_intinf_vt__intinf_make_int__15__7(ATSPMVi0nt(1))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1337(line=43, offs=12) -- 1357(line=43, offs=32)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1231(line=41, offs=12) -- 1251(line=41, offs=32)
 */
 ATSINSstore(ATSderef(arg1, atstkind_type(atstype_ptrk)), tmp62) ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1337(line=43, offs=12) -- 1357(line=43, offs=32)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1231(line=41, offs=12) -- 1251(line=41, offs=32)
 */
 ATSINSmove_void(tmpret56, ATSPMVempty()) ;
 ATSbranch_end()
 
 ATSbranch_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1365(line=44, offs=8) -- 1365(line=44, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1259(line=42, offs=8) -- 1259(line=42, offs=8)
 */
 ATSINSlab(__atstmplab11):
 /*
@@ -2514,18 +2514,18 @@
 ibranch-mbody:
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1370(line=44, offs=13) -- 1476(line=48, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1264(line=42, offs=13) -- 1370(line=46, offs=8)
 */
 /*
 letpush(beg)
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1398(line=45, offs=25) -- 1403(line=45, offs=30)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1292(line=43, offs=25) -- 1297(line=43, offs=30)
 */
 ATSINSmove(tmp68, atspre_g1int_sub_int(arg0, ATSPMVi0nt(1))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1389(line=45, offs=16) -- 1409(line=45, offs=36)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1283(line=43, offs=16) -- 1303(line=43, offs=36)
 */
 ATSINSmove_void(tmp67, fact_ref_28(tmp68, ATSPMVrefarg1(arg1))) ;
 
@@ -2534,20 +2534,20 @@
 */
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1444(line=47, offs=28) -- 1467(line=47, offs=51)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1338(line=45, offs=28) -- 1361(line=45, offs=51)
 */
 ATSINSmove(tmp69, ATSCNTRB_056_HX_056_intinf_vt__mul_intinf0_int__8__3(ATSderef(arg1, atstkind_type(atstype_ptrk)), arg0)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1423(line=47, offs=7) -- 1468(line=47, offs=52)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1317(line=45, offs=7) -- 1362(line=45, offs=52)
 */
 ATSINSstore(ATSderef(arg1, atstkind_type(atstype_ptrk)), ATSPMVcastfn(castvwtp0, atstype_boxed, tmp69)) ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1423(line=47, offs=7) -- 1468(line=47, offs=52)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1317(line=45, offs=7) -- 1362(line=45, offs=52)
 */
 ATSINSmove_void(tmpret56, ATSPMVempty()) ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1370(line=44, offs=13) -- 1476(line=48, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1264(line=42, offs=13) -- 1370(line=46, offs=8)
 */
 /*
 INSletpop()
@@ -2814,7 +2814,7 @@
 } /* end of [ATSCNTRB_056_HX_056_intinf_vt__mul_intinf0_int__8__3] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1481(line=50, offs=4) -- 1610(line=56, offs=6)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1375(line=48, offs=4) -- 1504(line=54, offs=6)
 */
 /*
 local: fact_ref_28$0(level=0)
@@ -2833,23 +2833,23 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1481(line=50, offs=4) -- 1610(line=56, offs=6)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1375(line=48, offs=4) -- 1504(line=54, offs=6)
 */
 ATSINSflab(__patsflab_fact_34):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1532(line=51, offs=3) -- 1610(line=56, offs=6)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1426(line=49, offs=3) -- 1504(line=54, offs=6)
 */
 /*
 letpush(beg)
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1544(line=52, offs=9) -- 1547(line=52, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1438(line=50, offs=9) -- 1441(line=50, offs=12)
 */
 /*
 ATSINStmpdec(tmpref73) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1575(line=53, offs=14) -- 1591(line=53, offs=30)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1469(line=51, offs=14) -- 1485(line=51, offs=30)
 */
 ATSINSmove_void(tmp74, fact_ref_28(arg0, ATSPMVrefarg1(ATSPMVptrof(tmpref73)))) ;
 
@@ -2858,11 +2858,11 @@
 */
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1601(line=55, offs=5) -- 1604(line=55, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1495(line=53, offs=5) -- 1498(line=53, offs=8)
 */
 ATSINSmove(tmpret72, tmpref73) ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1532(line=51, offs=3) -- 1610(line=56, offs=6)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1426(line=49, offs=3) -- 1504(line=54, offs=6)
 */
 /*
 INSletpop()
@@ -2872,7 +2872,7 @@
 } /* end of [fact_34] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1686(line=59, offs=5) -- 1955(line=68, offs=8)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1580(line=57, offs=5) -- 1849(line=66, offs=8)
 */
 /*
 local: dfact_ref_35$0(level=0)
@@ -2894,11 +2894,11 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1686(line=59, offs=5) -- 1955(line=68, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1580(line=57, offs=5) -- 1849(line=66, offs=8)
 */
 ATSINSflab(__patsflab_dfact_ref_35):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1760(line=60, offs=3) -- 1955(line=68, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1654(line=58, offs=3) -- 1849(line=66, offs=8)
 */
 ATScaseof_beg()
 /*
@@ -2906,15 +2906,15 @@
 */
 ATSbranch_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1777(line=61, offs=7) -- 1778(line=61, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1671(line=59, offs=7) -- 1672(line=59, offs=8)
 */
 ATSINSlab(__atstmplab12):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1711(line=59, offs=30) -- 1712(line=59, offs=31)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1605(line=57, offs=30) -- 1606(line=57, offs=31)
 */
 ATSifnthen(ATSCKpat_int(arg0, ATSPMVint(0))) { ATSINSgoto(__atstmplab14) ; } ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1778(line=61, offs=8) -- 1778(line=61, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1672(line=59, offs=8) -- 1672(line=59, offs=8)
 */
 ATSINSlab(__atstmplab13):
 /*
@@ -2924,31 +2924,31 @@
 ibranch-mbody:
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1789(line=61, offs=19) -- 1802(line=61, offs=32)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1683(line=59, offs=19) -- 1696(line=59, offs=32)
 */
 ATSINSmove(tmp76, ATSCNTRB_056_HX_056_intinf_vt__intinf_make_int__15__8(ATSPMVi0nt(1))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1782(line=61, offs=12) -- 1802(line=61, offs=32)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1676(line=59, offs=12) -- 1696(line=59, offs=32)
 */
 ATSINSstore(ATSderef(arg1, atstkind_type(atstype_ptrk)), tmp76) ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1782(line=61, offs=12) -- 1802(line=61, offs=32)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1676(line=59, offs=12) -- 1696(line=59, offs=32)
 */
 ATSINSmove_void(tmpret75, ATSPMVempty()) ;
 ATSbranch_end()
 
 ATSbranch_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1809(line=62, offs=7) -- 1810(line=62, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1703(line=60, offs=7) -- 1704(line=60, offs=8)
 */
 ATSINSlab(__atstmplab14):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1711(line=59, offs=30) -- 1712(line=59, offs=31)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1605(line=57, offs=30) -- 1606(line=57, offs=31)
 */
 ATSifnthen(ATSCKpat_int(arg0, ATSPMVint(1))) { ATSINSgoto(__atstmplab16) ; } ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1810(line=62, offs=8) -- 1810(line=62, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1704(line=60, offs=8) -- 1704(line=60, offs=8)
 */
 ATSINSlab(__atstmplab15):
 /*
@@ -2958,23 +2958,23 @@
 ibranch-mbody:
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1821(line=62, offs=19) -- 1834(line=62, offs=32)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1715(line=60, offs=19) -- 1728(line=60, offs=32)
 */
 ATSINSmove(tmp81, ATSCNTRB_056_HX_056_intinf_vt__intinf_make_int__15__9(ATSPMVi0nt(1))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1814(line=62, offs=12) -- 1834(line=62, offs=32)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1708(line=60, offs=12) -- 1728(line=60, offs=32)
 */
 ATSINSstore(ATSderef(arg1, atstkind_type(atstype_ptrk)), tmp81) ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1814(line=62, offs=12) -- 1834(line=62, offs=32)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1708(line=60, offs=12) -- 1728(line=60, offs=32)
 */
 ATSINSmove_void(tmpret75, ATSPMVempty()) ;
 ATSbranch_end()
 
 ATSbranch_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1842(line=63, offs=8) -- 1842(line=63, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1736(line=61, offs=8) -- 1736(line=61, offs=8)
 */
 ATSINSlab(__atstmplab16):
 /*
@@ -2984,29 +2984,29 @@
 ibranch-mbody:
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1847(line=63, offs=13) -- 1955(line=68, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1741(line=61, offs=13) -- 1849(line=66, offs=8)
 */
 /*
 letpush(beg)
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1876(line=64, offs=26) -- 1881(line=64, offs=31)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1770(line=62, offs=26) -- 1775(line=62, offs=31)
 */
 ATSINSmove(tmp87, atspre_g1int_sub_int(arg0, ATSPMVi0nt(2))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1866(line=64, offs=16) -- 1887(line=64, offs=37)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1760(line=62, offs=16) -- 1781(line=62, offs=37)
 */
 ATSINSmove_void(tmp86, dfact_ref_35(tmp87, ATSPMVrefarg1(arg1))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1898(line=65, offs=11) -- 1899(line=65, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1792(line=63, offs=11) -- 1793(line=63, offs=12)
 */
 /*
 ATSINStmpdec(tmpref88) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1902(line=65, offs=15) -- 1925(line=65, offs=38)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1796(line=63, offs=15) -- 1819(line=63, offs=38)
 */
 ATSINSmove(tmpref88, ATSCNTRB_056_HX_056_intinf_vt__mul_intinf0_int__8__4(ATSderef(arg1, atstkind_type(atstype_ptrk)), arg0)) ;
 
@@ -3015,15 +3015,15 @@
 */
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1939(line=67, offs=7) -- 1947(line=67, offs=15)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1833(line=65, offs=7) -- 1841(line=65, offs=15)
 */
 ATSINSstore(ATSderef(arg1, atstkind_type(atstype_ptrk)), tmpref88) ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1939(line=67, offs=7) -- 1947(line=67, offs=15)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1833(line=65, offs=7) -- 1841(line=65, offs=15)
 */
 ATSINSmove_void(tmpret75, ATSPMVempty()) ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1847(line=63, offs=13) -- 1955(line=68, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1741(line=61, offs=13) -- 1849(line=66, offs=8)
 */
 /*
 INSletpop()
@@ -3290,7 +3290,7 @@
 } /* end of [ATSCNTRB_056_HX_056_intinf_vt__mul_intinf0_int__8__4] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2031(line=71, offs=5) -- 2156(line=77, offs=6)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1925(line=69, offs=5) -- 2050(line=75, offs=6)
 */
 /*
 local: dfact_ref_35$0(level=0)
@@ -3309,23 +3309,23 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2031(line=71, offs=5) -- 2156(line=77, offs=6)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1925(line=69, offs=5) -- 2050(line=75, offs=6)
 */
 ATSINSflab(__patsflab_dfact_41):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2077(line=72, offs=3) -- 2156(line=77, offs=6)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1971(line=70, offs=3) -- 2050(line=75, offs=6)
 */
 /*
 letpush(beg)
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2089(line=73, offs=9) -- 2092(line=73, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1983(line=71, offs=9) -- 1986(line=71, offs=12)
 */
 /*
 ATSINStmpdec(tmpref92) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2120(line=74, offs=14) -- 2137(line=74, offs=31)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2014(line=72, offs=14) -- 2031(line=72, offs=31)
 */
 ATSINSmove_void(tmp93, dfact_ref_35(arg0, ATSPMVrefarg1(ATSPMVptrof(tmpref92)))) ;
 
@@ -3334,11 +3334,11 @@
 */
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2147(line=76, offs=5) -- 2150(line=76, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2041(line=74, offs=5) -- 2044(line=74, offs=8)
 */
 ATSINSmove(tmpret91, tmpref92) ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2077(line=72, offs=3) -- 2156(line=77, offs=6)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 1971(line=70, offs=3) -- 2050(line=75, offs=6)
 */
 /*
 INSletpop()
@@ -3348,7 +3348,7 @@
 } /* end of [dfact_41] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2219(line=80, offs=4) -- 2607(line=92, offs=6)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2113(line=78, offs=4) -- 2501(line=90, offs=6)
 */
 /*
 local: 
@@ -3367,23 +3367,23 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2219(line=80, offs=4) -- 2607(line=92, offs=6)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2113(line=78, offs=4) -- 2501(line=90, offs=6)
 */
 ATSINSflab(__patsflab_permutations_42):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2306(line=81, offs=3) -- 2607(line=92, offs=6)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2200(line=79, offs=3) -- 2501(line=90, offs=6)
 */
 /*
 letpush(beg)
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2551(line=88, offs=9) -- 2554(line=88, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2445(line=86, offs=9) -- 2448(line=86, offs=12)
 */
 /*
 ATSINStmpdec(tmpref115) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2576(line=89, offs=14) -- 2588(line=89, offs=26)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2470(line=87, offs=14) -- 2482(line=87, offs=26)
 */
 ATSINSmove_void(tmp116, loop_43(arg0, arg1, arg0, ATSPMVrefarg1(ATSPMVptrof(tmpref115)))) ;
 
@@ -3392,11 +3392,11 @@
 */
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2598(line=91, offs=5) -- 2601(line=91, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2492(line=89, offs=5) -- 2495(line=89, offs=8)
 */
 ATSINSmove(tmpret94, tmpref115) ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2306(line=81, offs=3) -- 2607(line=92, offs=6)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2200(line=79, offs=3) -- 2501(line=90, offs=6)
 */
 /*
 INSletpop()
@@ -3406,7 +3406,7 @@
 } /* end of [permutations_42] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2318(line=82, offs=9) -- 2537(line=86, offs=37)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2212(line=80, offs=9) -- 2431(line=84, offs=37)
 */
 /*
 local: loop_43$0(level=1)
@@ -3432,75 +3432,75 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2318(line=82, offs=9) -- 2537(line=86, offs=37)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2212(line=80, offs=9) -- 2431(line=84, offs=37)
 */
 ATSINSflab(__patsflab_loop_43):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2415(line=83, offs=14) -- 2420(line=83, offs=19)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2309(line=81, offs=14) -- 2314(line=81, offs=19)
 */
 ATSINSmove(tmp102, atspre_g1int_sub_int(env0, env1)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2415(line=83, offs=14) -- 2424(line=83, offs=23)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2309(line=81, offs=14) -- 2318(line=81, offs=23)
 */
 ATSINSmove(tmp101, atspre_g1int_add_int(tmp102, ATSPMVi0nt(1))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2411(line=83, offs=10) -- 2424(line=83, offs=23)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2305(line=81, offs=10) -- 2318(line=81, offs=23)
 */
 ATSINSmove(tmp96, ATSLIB_056_prelude__gt_g1int_int__44__1(arg0, tmp101)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2408(line=83, offs=7) -- 2537(line=86, offs=37)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2302(line=81, offs=7) -- 2431(line=84, offs=37)
 */
 ATSif(
 tmp96
 ) ATSthen() {
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2444(line=84, offs=15) -- 2449(line=84, offs=20)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2338(line=82, offs=15) -- 2343(line=82, offs=20)
 */
 ATSINSmove(tmp104, atspre_g1int_sub_int(arg0, ATSPMVi0nt(1))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2439(line=84, offs=10) -- 2455(line=84, offs=26)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2333(line=82, offs=10) -- 2349(line=82, offs=26)
 */
 ATSINSmove_void(tmp103, loop_43(env0, env1, tmp104, ATSPMVrefarg1(arg1))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2465(line=84, offs=36) -- 2488(line=84, offs=59)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2359(line=82, offs=36) -- 2382(line=82, offs=59)
 */
 ATSINSmove(tmp105, ATSCNTRB_056_HX_056_intinf_vt__mul_intinf0_int__8__5(ATSderef(arg1, atstkind_type(atstype_ptrk)), arg0)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2458(line=84, offs=29) -- 2488(line=84, offs=59)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2352(line=82, offs=29) -- 2382(line=82, offs=59)
 */
 ATSINSstore(ATSderef(arg1, atstkind_type(atstype_ptrk)), tmp105) ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2458(line=84, offs=29) -- 2488(line=84, offs=59)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2352(line=82, offs=29) -- 2382(line=82, offs=59)
 */
 ATSINSmove_void(tmpret95, ATSPMVempty()) ;
 } ATSelse() {
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2516(line=86, offs=16) -- 2537(line=86, offs=37)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2410(line=84, offs=16) -- 2431(line=84, offs=37)
 */
 ATSINSmove(tmp114, atspre_g1int_sub_int(env0, env1)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2516(line=86, offs=16) -- 2537(line=86, offs=37)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2410(line=84, offs=16) -- 2431(line=84, offs=37)
 */
 ATSINSmove(tmp113, atspre_g1int_add_int(tmp114, ATSPMVi0nt(1))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2516(line=86, offs=16) -- 2537(line=86, offs=37)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2410(line=84, offs=16) -- 2431(line=84, offs=37)
 */
 ATSINSmove(tmp108, ATSCNTRB_056_HX_056_intinf_vt__intinf_make_int__15__10(tmp113)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2509(line=86, offs=9) -- 2537(line=86, offs=37)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2403(line=84, offs=9) -- 2431(line=84, offs=37)
 */
 ATSINSstore(ATSderef(arg1, atstkind_type(atstype_ptrk)), tmp108) ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2509(line=86, offs=9) -- 2537(line=86, offs=37)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2403(line=84, offs=9) -- 2431(line=84, offs=37)
 */
 ATSINSmove_void(tmpret95, ATSPMVempty()) ;
 } /* ATSendif */
@@ -3746,7 +3746,7 @@
 } /* end of [ATSLIB_056_prelude__ptr_alloc__17__10] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2659(line=95, offs=4) -- 3258(line=118, offs=6)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2553(line=93, offs=4) -- 3137(line=116, offs=6)
 */
 /*
 local: fact_34$0(level=0)
@@ -3767,11 +3767,11 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2659(line=95, offs=4) -- 3258(line=118, offs=6)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2553(line=93, offs=4) -- 3137(line=116, offs=6)
 */
 ATSINSflab(__patsflab_catalan_50):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2700(line=96, offs=3) -- 3258(line=118, offs=6)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2594(line=94, offs=3) -- 3137(line=116, offs=6)
 */
 /*
 letpush(beg)
@@ -3781,7 +3781,7 @@
 */
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2995(line=107, offs=5) -- 3252(line=117, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2889(line=105, offs=5) -- 3131(line=115, offs=10)
 */
 ATScaseof_beg()
 /*
@@ -3789,15 +3789,15 @@
 */
 ATSbranch_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3014(line=108, offs=9) -- 3015(line=108, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2908(line=106, offs=9) -- 2909(line=106, offs=10)
 */
 ATSINSlab(__atstmplab20):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2675(line=95, offs=20) -- 2676(line=95, offs=21)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2569(line=93, offs=20) -- 2570(line=93, offs=21)
 */
 ATSifnthen(ATSCKpat_int(arg0, ATSPMVint(0))) { ATSINSgoto(__atstmplab22) ; } ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3015(line=108, offs=10) -- 3015(line=108, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2909(line=106, offs=10) -- 2909(line=106, offs=10)
 */
 ATSINSlab(__atstmplab21):
 /*
@@ -3807,7 +3807,7 @@
 ibranch-mbody:
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3019(line=108, offs=14) -- 3032(line=108, offs=27)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2913(line=106, offs=14) -- 2926(line=106, offs=27)
 */
 ATSINSmove(tmpret117, ATSCNTRB_056_HX_056_intinf_vt__intinf_make_int__15__12(ATSPMVi0nt(1))) ;
 
@@ -3815,15 +3815,15 @@
 
 ATSbranch_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3041(line=109, offs=9) -- 3042(line=109, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2935(line=107, offs=9) -- 2936(line=107, offs=10)
 */
 ATSINSlab(__atstmplab22):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2675(line=95, offs=20) -- 2676(line=95, offs=21)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2569(line=93, offs=20) -- 2570(line=93, offs=21)
 */
 ATSifnthen(ATSCKpat_int(arg0, ATSPMVint(1))) { ATSINSgoto(__atstmplab24) ; } ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3042(line=109, offs=10) -- 3042(line=109, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2936(line=107, offs=10) -- 2936(line=107, offs=10)
 */
 ATSINSlab(__atstmplab23):
 /*
@@ -3833,7 +3833,7 @@
 ibranch-mbody:
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3046(line=109, offs=14) -- 3059(line=109, offs=27)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2940(line=107, offs=14) -- 2953(line=107, offs=27)
 */
 ATSINSmove(tmpret117, ATSCNTRB_056_HX_056_intinf_vt__intinf_make_int__15__13(ATSPMVi0nt(1))) ;
 
@@ -3841,7 +3841,7 @@
 
 ATSbranch_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3069(line=110, offs=10) -- 3069(line=110, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2963(line=108, offs=10) -- 2963(line=108, offs=10)
 */
 ATSINSlab(__atstmplab24):
 /*
@@ -3851,46 +3851,46 @@
 ibranch-mbody:
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3074(line=110, offs=15) -- 3252(line=117, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2968(line=108, offs=15) -- 3131(line=115, offs=10)
 */
 /*
 letpush(beg)
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3090(line=111, offs=13) -- 3091(line=111, offs=14)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2984(line=109, offs=13) -- 2985(line=109, offs=14)
 */
 /*
 ATSINStmpdec(tmpref138) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3094(line=111, offs=17) -- 3110(line=111, offs=33)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2988(line=109, offs=17) -- 3004(line=109, offs=33)
 */
 ATSINSmove(tmpref138, numerator_loop_51(arg0, arg0)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3124(line=112, offs=13) -- 3125(line=112, offs=14)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3018(line=110, offs=13) -- 3019(line=110, offs=14)
 */
 /*
 ATSINStmpdec(tmpref139) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3128(line=112, offs=17) -- 3134(line=112, offs=23)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3022(line=110, offs=17) -- 3028(line=110, offs=23)
 */
 ATSINSmove(tmpref139, fact_34(arg0)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3148(line=113, offs=13) -- 3149(line=113, offs=14)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3042(line=111, offs=13) -- 3043(line=111, offs=14)
 */
 /*
 ATSINStmpdec(tmpref140) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3152(line=113, offs=17) -- 3177(line=113, offs=42)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3046(line=111, offs=17) -- 3071(line=111, offs=42)
 */
 ATSINSmove(tmpref140, ATSCNTRB_056_HX_056_intinf_vt__div_intinf0_intinf1__59__1(tmpref138, ATSPMVrefarg0(tmpref139))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3194(line=114, offs=17) -- 3207(line=114, offs=30)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3088(line=112, offs=17) -- 3101(line=112, offs=30)
 */
 ATSINSmove_void(tmp145, ATSCNTRB_056_HX_056_intinf_vt__intinf_free__12__2(tmpref139)) ;
 
@@ -3899,11 +3899,11 @@
 */
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3226(line=116, offs=9) -- 3241(line=116, offs=24)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3120(line=114, offs=9) -- 3121(line=114, offs=10)
 */
-ATSINSmove(tmpret117, ATSPMVcastfn(castvwtp0, atstkind_type(atstype_ptrk), tmpref140)) ;
+ATSINSmove(tmpret117, tmpref140) ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3074(line=110, offs=15) -- 3252(line=117, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2968(line=108, offs=15) -- 3131(line=115, offs=10)
 */
 /*
 INSletpop()
@@ -3916,7 +3916,7 @@
 ATScaseof_end()
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2700(line=96, offs=3) -- 3258(line=118, offs=6)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2594(line=94, offs=3) -- 3137(line=116, offs=6)
 */
 /*
 INSletpop()
@@ -3926,7 +3926,7 @@
 } /* end of [catalan_50] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2712(line=97, offs=9) -- 2985(line=105, offs=12)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2606(line=95, offs=9) -- 2879(line=103, offs=12)
 */
 /*
 local: numerator_loop_51$0(level=1)
@@ -3948,11 +3948,11 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2712(line=97, offs=9) -- 2985(line=105, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2606(line=95, offs=9) -- 2879(line=103, offs=12)
 */
 ATSINSflab(__patsflab_numerator_loop_51):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2788(line=98, offs=7) -- 2985(line=105, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2682(line=96, offs=7) -- 2879(line=103, offs=12)
 */
 ATScaseof_beg()
 /*
@@ -3960,15 +3960,15 @@
 */
 ATSbranch_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2809(line=99, offs=11) -- 2810(line=99, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2703(line=97, offs=11) -- 2704(line=97, offs=12)
 */
 ATSINSlab(__atstmplab17):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2754(line=97, offs=51) -- 2755(line=97, offs=52)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2648(line=95, offs=51) -- 2649(line=95, offs=52)
 */
 ATSifnthen(ATSCKpat_int(arg0, ATSPMVint(2))) { ATSINSgoto(__atstmplab19) ; } ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2810(line=99, offs=12) -- 2810(line=99, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2704(line=97, offs=12) -- 2704(line=97, offs=12)
 */
 ATSINSlab(__atstmplab18):
 /*
@@ -3978,12 +3978,12 @@
 ibranch-mbody:
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2814(line=99, offs=16) -- 2831(line=99, offs=33)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2708(line=97, offs=16) -- 2725(line=97, offs=33)
 */
 ATSINSmove(tmp123, atspre_g1int_add_int(env0, ATSPMVi0nt(2))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2814(line=99, offs=16) -- 2831(line=99, offs=33)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2708(line=97, offs=16) -- 2725(line=97, offs=33)
 */
 ATSINSmove(tmpret118, ATSCNTRB_056_HX_056_intinf_vt__intinf_make_int__15__11(tmp123)) ;
 
@@ -3991,7 +3991,7 @@
 
 ATSbranch_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2843(line=100, offs=12) -- 2843(line=100, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2737(line=98, offs=12) -- 2737(line=98, offs=12)
 */
 ATSINSlab(__atstmplab19):
 /*
@@ -4001,40 +4001,40 @@
 ibranch-mbody:
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2848(line=100, offs=17) -- 2985(line=105, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2742(line=98, offs=17) -- 2879(line=103, offs=12)
 */
 /*
 letpush(beg)
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2866(line=101, offs=15) -- 2867(line=101, offs=16)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2760(line=99, offs=15) -- 2761(line=99, offs=16)
 */
 /*
 ATSINStmpdec(tmpref124) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2885(line=101, offs=34) -- 2890(line=101, offs=39)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2779(line=99, offs=34) -- 2784(line=99, offs=39)
 */
 ATSINSmove(tmp125, atspre_g1int_sub_int(arg0, ATSPMVi0nt(1))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2870(line=101, offs=19) -- 2891(line=101, offs=40)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2764(line=99, offs=19) -- 2785(line=99, offs=40)
 */
 ATSINSmove(tmpref124, numerator_loop_51(env0, tmp125)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2906(line=102, offs=15) -- 2907(line=102, offs=16)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2800(line=100, offs=15) -- 2801(line=100, offs=16)
 */
 /*
 ATSINStmpdec(tmpref126) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2929(line=102, offs=38) -- 2934(line=102, offs=43)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2823(line=100, offs=38) -- 2828(line=100, offs=43)
 */
 ATSINSmove(tmp129, atspre_g1int_add_int(env0, arg0)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2910(line=102, offs=19) -- 2935(line=102, offs=44)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2804(line=100, offs=19) -- 2829(line=100, offs=44)
 */
 ATSINSmove(tmpref126, ATSCNTRB_056_HX_056_intinf_vt__mul_intinf0_int__8__6(tmpref124, tmp129)) ;
 
@@ -4043,11 +4043,11 @@
 */
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2957(line=104, offs=11) -- 2972(line=104, offs=26)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2851(line=102, offs=11) -- 2866(line=102, offs=26)
 */
 ATSINSmove(tmpret118, ATSPMVcastfn(castvwtp0, atstkind_type(atstype_ptrk), tmpref126)) ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2848(line=100, offs=17) -- 2985(line=105, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 2742(line=98, offs=17) -- 2879(line=103, offs=12)
 */
 /*
 INSletpop()
@@ -4583,7 +4583,7 @@
 } /* end of [ATSCNTRB_056_HX_056_intinf_vt__intinf_free__12__2] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3352(line=122, offs=4) -- 4150(line=148, offs=6)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3231(line=120, offs=4) -- 4014(line=146, offs=6)
 */
 /*
 local: fact_34$0(level=0)
@@ -4606,11 +4606,11 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3352(line=122, offs=4) -- 4150(line=148, offs=6)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3231(line=120, offs=4) -- 4014(line=146, offs=6)
 */
 ATSINSflab(__patsflab_choose_62):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3411(line=123, offs=3) -- 4150(line=148, offs=6)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3290(line=121, offs=3) -- 4014(line=146, offs=6)
 */
 /*
 letpush(beg)
@@ -4620,7 +4620,7 @@
 */
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3818(line=135, offs=5) -- 4144(line=147, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3697(line=133, offs=5) -- 4008(line=145, offs=10)
 */
 ATScaseof_beg()
 /*
@@ -4628,15 +4628,15 @@
 */
 ATSbranch_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3837(line=136, offs=9) -- 3838(line=136, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3716(line=134, offs=9) -- 3717(line=134, offs=10)
 */
 ATSINSlab(__atstmplab30):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3386(line=122, offs=38) -- 3387(line=122, offs=39)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3265(line=120, offs=38) -- 3266(line=120, offs=39)
 */
 ATSifnthen(ATSCKpat_int(arg1, ATSPMVint(0))) { ATSINSgoto(__atstmplab32) ; } ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3838(line=136, offs=10) -- 3838(line=136, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3717(line=134, offs=10) -- 3717(line=134, offs=10)
 */
 ATSINSlab(__atstmplab31):
 /*
@@ -4646,7 +4646,7 @@
 ibranch-mbody:
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3842(line=136, offs=14) -- 3855(line=136, offs=27)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3721(line=134, offs=14) -- 3734(line=134, offs=27)
 */
 ATSINSmove(tmpret148, ATSCNTRB_056_HX_056_intinf_vt__intinf_make_int__15__16(ATSPMVi0nt(1))) ;
 
@@ -4654,15 +4654,15 @@
 
 ATSbranch_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3864(line=137, offs=9) -- 3865(line=137, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3743(line=135, offs=9) -- 3744(line=135, offs=10)
 */
 ATSINSlab(__atstmplab32):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3386(line=122, offs=38) -- 3387(line=122, offs=39)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3265(line=120, offs=38) -- 3266(line=120, offs=39)
 */
 ATSifnthen(ATSCKpat_int(arg1, ATSPMVint(1))) { ATSINSgoto(__atstmplab34) ; } ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3865(line=137, offs=10) -- 3865(line=137, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3744(line=135, offs=10) -- 3744(line=135, offs=10)
 */
 ATSINSlab(__atstmplab33):
 /*
@@ -4672,7 +4672,7 @@
 ibranch-mbody:
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3869(line=137, offs=14) -- 3881(line=137, offs=26)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3748(line=135, offs=14) -- 3760(line=135, offs=26)
 */
 ATSINSmove(tmpret148, ATSCNTRB_056_HX_056_intinf_vt__intinf_make_int__15__17(arg0)) ;
 
@@ -4680,7 +4680,7 @@
 
 ATSbranch_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3892(line=138, offs=10) -- 3892(line=138, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3771(line=136, offs=10) -- 3771(line=136, offs=10)
 */
 ATSINSlab(__atstmplab34):
 /*
@@ -4690,12 +4690,12 @@
 ibranch-guard:
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3898(line=138, offs=16) -- 3903(line=138, offs=21)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3777(line=136, offs=16) -- 3782(line=136, offs=21)
 */
 ATSINSmove(tmp177, ATSLIB_056_prelude__gt_g1int_int__44__2(arg1, arg0)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3898(line=138, offs=16) -- 3903(line=138, offs=21)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3777(line=136, offs=16) -- 3782(line=136, offs=21)
 */
 ATSifnthen(ATSCKpat_bool(tmp177, ATSPMVbool_true())) { ATSINSgoto(__atstmplab35) ; } ;
 /*
@@ -4705,7 +4705,7 @@
 ibranch-mbody:
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3907(line=138, offs=25) -- 3920(line=138, offs=38)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3786(line=136, offs=25) -- 3799(line=136, offs=38)
 */
 ATSINSmove(tmpret148, ATSCNTRB_056_HX_056_intinf_vt__intinf_make_int__15__18(ATSPMVi0nt(0))) ;
 
@@ -4713,7 +4713,7 @@
 
 ATSbranch_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3930(line=139, offs=10) -- 3930(line=139, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3809(line=137, offs=10) -- 3809(line=137, offs=10)
 */
 ATSINSlab(__atstmplab35):
 /*
@@ -4723,46 +4723,46 @@
 ibranch-mbody:
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3935(line=139, offs=15) -- 4144(line=147, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3814(line=137, offs=15) -- 4008(line=145, offs=10)
 */
 /*
 letpush(beg)
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3951(line=140, offs=13) -- 3952(line=140, offs=14)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3830(line=138, offs=13) -- 3831(line=138, offs=14)
 */
 /*
 ATSINStmpdec(tmpref184) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3983(line=141, offs=18) -- 4003(line=141, offs=38)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3862(line=139, offs=18) -- 3882(line=139, offs=38)
 */
 ATSINSmove_void(tmp185, numerator_loop_63(arg0, arg1, ATSPMVrefarg1(ATSPMVptrof(tmpref184)))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4016(line=142, offs=13) -- 4017(line=142, offs=14)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3895(line=140, offs=13) -- 3896(line=140, offs=14)
 */
 /*
 ATSINStmpdec(tmpref186) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4020(line=142, offs=17) -- 4026(line=142, offs=23)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3899(line=140, offs=17) -- 3905(line=140, offs=23)
 */
 ATSINSmove(tmpref186, fact_34(arg1)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4040(line=143, offs=13) -- 4041(line=143, offs=14)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3919(line=141, offs=13) -- 3920(line=141, offs=14)
 */
 /*
 ATSINStmpdec(tmpref187) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4044(line=143, offs=17) -- 4069(line=143, offs=42)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3923(line=141, offs=17) -- 3948(line=141, offs=42)
 */
 ATSINSmove(tmpref187, ATSCNTRB_056_HX_056_intinf_vt__div_intinf0_intinf1__59__2(tmpref184, ATSPMVrefarg0(tmpref186))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4086(line=144, offs=17) -- 4099(line=144, offs=30)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3965(line=142, offs=17) -- 3978(line=142, offs=30)
 */
 ATSINSmove_void(tmp190, ATSCNTRB_056_HX_056_intinf_vt__intinf_free__12__3(tmpref186)) ;
 
@@ -4771,11 +4771,11 @@
 */
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4118(line=146, offs=9) -- 4133(line=146, offs=24)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3997(line=144, offs=9) -- 3998(line=144, offs=10)
 */
-ATSINSmove(tmpret148, ATSPMVcastfn(castvwtp0, atstkind_type(atstype_ptrk), tmpref187)) ;
+ATSINSmove(tmpret148, tmpref187) ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3935(line=139, offs=15) -- 4144(line=147, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3814(line=137, offs=15) -- 4008(line=145, offs=10)
 */
 /*
 INSletpop()
@@ -4788,7 +4788,7 @@
 ATScaseof_end()
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3411(line=123, offs=3) -- 4150(line=148, offs=6)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3290(line=121, offs=3) -- 4014(line=146, offs=6)
 */
 /*
 INSletpop()
@@ -4798,7 +4798,7 @@
 } /* end of [choose_62] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3423(line=124, offs=9) -- 3808(line=133, offs=12)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3302(line=122, offs=9) -- 3687(line=131, offs=12)
 */
 /*
 local: numerator_loop_63$0(level=1)
@@ -4824,11 +4824,11 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3423(line=124, offs=9) -- 3808(line=133, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3302(line=122, offs=9) -- 3687(line=131, offs=12)
 */
 ATSINSflab(__patsflab_numerator_loop_63):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3528(line=125, offs=7) -- 3808(line=133, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3407(line=123, offs=7) -- 3687(line=131, offs=12)
 */
 ATScaseof_beg()
 /*
@@ -4836,15 +4836,15 @@
 */
 ATSbranch_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3549(line=126, offs=11) -- 3550(line=126, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3428(line=124, offs=11) -- 3429(line=124, offs=12)
 */
 ATSINSlab(__atstmplab25):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3465(line=124, offs=51) -- 3466(line=124, offs=52)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3344(line=122, offs=51) -- 3345(line=122, offs=52)
 */
 ATSifnthen(ATSCKpat_int(arg0, ATSPMVint(1))) { ATSINSgoto(__atstmplab27) ; } ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3550(line=126, offs=12) -- 3550(line=126, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3429(line=124, offs=12) -- 3429(line=124, offs=12)
 */
 ATSINSlab(__atstmplab26):
 /*
@@ -4854,31 +4854,31 @@
 ibranch-mbody:
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3561(line=126, offs=23) -- 3573(line=126, offs=35)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3440(line=124, offs=23) -- 3452(line=124, offs=35)
 */
 ATSINSmove(tmp150, ATSCNTRB_056_HX_056_intinf_vt__intinf_make_int__15__14(env0)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3554(line=126, offs=16) -- 3573(line=126, offs=35)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3433(line=124, offs=16) -- 3452(line=124, offs=35)
 */
 ATSINSstore(ATSderef(arg1, atstkind_type(atstype_ptrk)), tmp150) ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3554(line=126, offs=16) -- 3573(line=126, offs=35)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3433(line=124, offs=16) -- 3452(line=124, offs=35)
 */
 ATSINSmove_void(tmpret149, ATSPMVempty()) ;
 ATSbranch_end()
 
 ATSbranch_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3585(line=127, offs=11) -- 3586(line=127, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3464(line=125, offs=11) -- 3465(line=125, offs=12)
 */
 ATSINSlab(__atstmplab27):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3465(line=124, offs=51) -- 3466(line=124, offs=52)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3344(line=122, offs=51) -- 3345(line=122, offs=52)
 */
 ATSifnthen(ATSCKpat_int(arg0, ATSPMVint(2))) { ATSINSgoto(__atstmplab29) ; } ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3586(line=127, offs=12) -- 3586(line=127, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3465(line=125, offs=12) -- 3465(line=125, offs=12)
 */
 ATSINSlab(__atstmplab28):
 /*
@@ -4888,33 +4888,33 @@
 ibranch-mbody:
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3611(line=127, offs=37) -- 3634(line=127, offs=60)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3490(line=125, offs=37) -- 3513(line=125, offs=60)
 */
 ATSINSmove(tmp161, atspre_g1int_sub_int(env0, ATSPMVi0nt(1))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3611(line=127, offs=37) -- 3634(line=127, offs=60)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3490(line=125, offs=37) -- 3513(line=125, offs=60)
 */
 ATSINSmove(tmp160, atspre_g1int_mul_int(tmp161, env0)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3611(line=127, offs=37) -- 3634(line=127, offs=60)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3490(line=125, offs=37) -- 3513(line=125, offs=60)
 */
 ATSINSmove(tmp155, ATSCNTRB_056_HX_056_intinf_vt__intinf_make_int__15__15(tmp160)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3590(line=127, offs=16) -- 3635(line=127, offs=61)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3469(line=125, offs=16) -- 3514(line=125, offs=61)
 */
 ATSINSstore(ATSderef(arg1, atstkind_type(atstype_ptrk)), ATSPMVcastfn(castvwtp0, atstype_boxed, tmp155)) ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3590(line=127, offs=16) -- 3635(line=127, offs=61)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3469(line=125, offs=16) -- 3514(line=125, offs=61)
 */
 ATSINSmove_void(tmpret149, ATSPMVempty()) ;
 ATSbranch_end()
 
 ATSbranch_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3647(line=128, offs=12) -- 3647(line=128, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3526(line=126, offs=12) -- 3526(line=126, offs=12)
 */
 ATSINSlab(__atstmplab29):
 /*
@@ -4924,39 +4924,39 @@
 ibranch-mbody:
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3652(line=128, offs=17) -- 3808(line=133, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3531(line=126, offs=17) -- 3687(line=131, offs=12)
 */
 /*
 letpush(beg)
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3690(line=129, offs=35) -- 3695(line=129, offs=40)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3569(line=127, offs=35) -- 3574(line=127, offs=40)
 */
 ATSINSmove(tmp163, atspre_g1int_sub_int(arg0, ATSPMVi0nt(1))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3675(line=129, offs=20) -- 3701(line=129, offs=46)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3554(line=127, offs=20) -- 3580(line=127, offs=46)
 */
 ATSINSmove_void(tmp162, numerator_loop_63(env0, tmp163, ATSPMVrefarg1(arg1))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3716(line=130, offs=15) -- 3717(line=130, offs=16)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3595(line=128, offs=15) -- 3596(line=128, offs=16)
 */
 /*
 ATSINStmpdec(tmpref164) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3741(line=130, offs=40) -- 3746(line=130, offs=45)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3620(line=128, offs=40) -- 3625(line=128, offs=45)
 */
 ATSINSmove(tmp168, atspre_g1int_add_int(env0, ATSPMVi0nt(1))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3741(line=130, offs=40) -- 3750(line=130, offs=49)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3620(line=128, offs=40) -- 3629(line=128, offs=49)
 */
 ATSINSmove(tmp167, atspre_g1int_sub_int(tmp168, arg0)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3720(line=130, offs=19) -- 3751(line=130, offs=50)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3599(line=128, offs=19) -- 3630(line=128, offs=50)
 */
 ATSINSmove(tmpref164, ATSCNTRB_056_HX_056_intinf_vt__mul_intinf0_int__8__7(ATSderef(arg1, atstkind_type(atstype_ptrk)), tmp167)) ;
 
@@ -4965,15 +4965,15 @@
 */
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3773(line=132, offs=11) -- 3795(line=132, offs=33)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3652(line=130, offs=11) -- 3674(line=130, offs=33)
 */
 ATSINSstore(ATSderef(arg1, atstkind_type(atstype_ptrk)), ATSPMVcastfn(castvwtp0, atstype_boxed, tmpref164)) ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3773(line=132, offs=11) -- 3795(line=132, offs=33)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3652(line=130, offs=11) -- 3674(line=130, offs=33)
 */
 ATSINSmove_void(tmpret149, ATSPMVempty()) ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3652(line=128, offs=17) -- 3808(line=133, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 3531(line=126, offs=17) -- 3687(line=131, offs=12)
 */
 /*
 INSletpop()
@@ -5686,7 +5686,7 @@
 } /* end of [ATSCNTRB_056_HX_056_intinf_vt__intinf_free__12__3] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4405(line=155, offs=4) -- 5492(line=187, offs=8)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4269(line=153, offs=4) -- 5356(line=185, offs=8)
 */
 /*
 local: fact_34$0(level=0), choose_62$0(level=0)
@@ -5711,101 +5711,101 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4405(line=155, offs=4) -- 5492(line=187, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4269(line=153, offs=4) -- 5356(line=185, offs=8)
 */
 ATSINSflab(__patsflab_stirling2_79):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4480(line=157, offs=7) -- 4494(line=157, offs=21)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4344(line=155, offs=7) -- 4358(line=155, offs=21)
 */
 ATSINSmove(tmp195, ATSLIB_056_prelude__eq_g1int_int__80__1(arg1, ATSPMVi0nt(0))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4480(line=157, offs=7) -- 4494(line=157, offs=21)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4344(line=155, offs=7) -- 4358(line=155, offs=21)
 */
 ATSif(
 tmp195
 ) ATSthen() {
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4480(line=157, offs=7) -- 4494(line=157, offs=21)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4344(line=155, offs=7) -- 4358(line=155, offs=21)
 */
 ATSINSmove(tmp194, ATSLIB_056_prelude__eq_g1int_int__80__2(arg0, ATSPMVi0nt(0))) ;
 
 } ATSelse() {
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4480(line=157, offs=7) -- 4494(line=157, offs=21)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4344(line=155, offs=7) -- 4358(line=155, offs=21)
 */
 ATSINSmove(tmp194, ATSPMVbool_false()) ;
 } /* ATSendif */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4467(line=156, offs=3) -- 5492(line=187, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4331(line=154, offs=3) -- 5356(line=185, offs=8)
 */
 ATSif(
 tmp194
 ) ATSthen() {
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4498(line=157, offs=25) -- 4511(line=157, offs=38)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4362(line=155, offs=25) -- 4375(line=155, offs=38)
 */
 ATSINSmove(tmpret193, ATSCNTRB_056_HX_056_intinf_vt__intinf_make_int__15__19(ATSPMVi0nt(1))) ;
 
 } ATSelse() {
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4518(line=158, offs=7) -- 4523(line=158, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4382(line=156, offs=7) -- 4387(line=156, offs=12)
 */
 ATSINSmove(tmp206, ATSLIB_056_prelude__gt_g1int_int__44__3(arg1, arg0)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4467(line=156, offs=3) -- 5492(line=187, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4331(line=154, offs=3) -- 5356(line=185, offs=8)
 */
 ATSif(
 tmp206
 ) ATSthen() {
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4527(line=158, offs=16) -- 4540(line=158, offs=29)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4391(line=156, offs=16) -- 4404(line=156, offs=29)
 */
 ATSINSmove(tmpret193, ATSCNTRB_056_HX_056_intinf_vt__intinf_make_int__15__20(ATSPMVi0nt(0))) ;
 
 } ATSelse() {
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4552(line=159, offs=12) -- 5492(line=187, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4416(line=157, offs=12) -- 5356(line=185, offs=8)
 */
 /*
 letpush(beg)
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5316(line=180, offs=11) -- 5319(line=180, offs=14)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5180(line=178, offs=11) -- 5183(line=178, offs=14)
 */
 /*
 ATSINStmpdec(tmpref262) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5343(line=181, offs=16) -- 5359(line=181, offs=32)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5207(line=179, offs=16) -- 5223(line=179, offs=32)
 */
 ATSINSmove_void(tmp263, top_loop_89(arg0, arg1, arg1, ATSPMVrefarg1(ATSPMVptrof(tmpref262)))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5370(line=182, offs=11) -- 5373(line=182, offs=14)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5234(line=180, offs=11) -- 5237(line=180, offs=14)
 */
 /*
 ATSINStmpdec(tmpref264) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5376(line=182, offs=17) -- 5382(line=182, offs=23)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5240(line=180, offs=17) -- 5246(line=180, offs=23)
 */
 ATSINSmove(tmpref264, fact_34(arg1)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5394(line=183, offs=11) -- 5400(line=183, offs=17)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5258(line=181, offs=11) -- 5264(line=181, offs=17)
 */
 /*
 ATSINStmpdec(tmpref265) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5403(line=183, offs=20) -- 5432(line=183, offs=49)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5267(line=181, offs=20) -- 5296(line=181, offs=49)
 */
 ATSINSmove(tmpref265, ATSCNTRB_056_HX_056_intinf_vt__div_intinf0_intinf1__59__3(tmpref262, ATSPMVrefarg0(tmpref264))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5448(line=184, offs=16) -- 5463(line=184, offs=31)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5312(line=182, offs=16) -- 5327(line=182, offs=31)
 */
 ATSINSmove_void(tmp268, ATSCNTRB_056_HX_056_intinf_vt__intinf_free__12__6(tmpref264)) ;
 
@@ -5814,11 +5814,11 @@
 */
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5478(line=186, offs=7) -- 5484(line=186, offs=13)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5342(line=184, offs=7) -- 5348(line=184, offs=13)
 */
 ATSINSmove(tmpret193, tmpref265) ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4552(line=159, offs=12) -- 5492(line=187, offs=8)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4416(line=157, offs=12) -- 5356(line=185, offs=8)
 */
 /*
 INSletpop()
@@ -6190,7 +6190,7 @@
 } /* end of [ATSLIB_056_prelude__ptr_alloc__17__20] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4566(line=160, offs=11) -- 5298(line=178, offs=12)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4430(line=158, offs=11) -- 5162(line=176, offs=12)
 */
 /*
 local: choose_62$0(level=0), top_loop_89$0(level=1)
@@ -6217,11 +6217,11 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4566(line=160, offs=11) -- 5298(line=178, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4430(line=158, offs=11) -- 5162(line=176, offs=12)
 */
 ATSINSflab(__patsflab_top_loop_89):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4645(line=161, offs=9) -- 5298(line=178, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4509(line=159, offs=9) -- 5162(line=176, offs=12)
 */
 ATScaseof_beg()
 /*
@@ -6229,15 +6229,15 @@
 */
 ATSbranch_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4668(line=162, offs=13) -- 4669(line=162, offs=14)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4532(line=160, offs=13) -- 4533(line=160, offs=14)
 */
 ATSINSlab(__atstmplab36):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4590(line=160, offs=35) -- 4591(line=160, offs=36)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4454(line=158, offs=35) -- 4455(line=158, offs=36)
 */
 ATSifnthen(ATSCKpat_int(arg0, ATSPMVint(0))) { ATSINSgoto(__atstmplab38) ; } ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4669(line=162, offs=14) -- 4669(line=162, offs=14)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4533(line=160, offs=14) -- 4533(line=160, offs=14)
 */
 ATSINSlab(__atstmplab37):
 /*
@@ -6247,23 +6247,23 @@
 ibranch-mbody:
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4680(line=162, offs=25) -- 4693(line=162, offs=38)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4544(line=160, offs=25) -- 4557(line=160, offs=38)
 */
 ATSINSmove(tmp214, ATSCNTRB_056_HX_056_intinf_vt__intinf_make_int__15__21(ATSPMVi0nt(0))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4673(line=162, offs=18) -- 4693(line=162, offs=38)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4537(line=160, offs=18) -- 4557(line=160, offs=38)
 */
 ATSINSstore(ATSderef(arg1, atstkind_type(atstype_ptrk)), tmp214) ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4673(line=162, offs=18) -- 4693(line=162, offs=38)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4537(line=160, offs=18) -- 4557(line=160, offs=38)
 */
 ATSINSmove_void(tmpret213, ATSPMVempty()) ;
 ATSbranch_end()
 
 ATSbranch_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4707(line=163, offs=14) -- 4707(line=163, offs=14)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4571(line=161, offs=14) -- 4571(line=161, offs=14)
 */
 ATSINSlab(__atstmplab38):
 /*
@@ -6273,81 +6273,81 @@
 ibranch-mbody:
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4712(line=163, offs=19) -- 5298(line=178, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4576(line=161, offs=19) -- 5162(line=176, offs=12)
 */
 /*
 letpush(beg)
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4918(line=170, offs=31) -- 4923(line=170, offs=36)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4782(line=168, offs=31) -- 4787(line=168, offs=36)
 */
 ATSINSmove(tmp231, atspre_g1int_sub_int(arg0, ATSPMVi0nt(1))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4909(line=170, offs=22) -- 4929(line=170, offs=42)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4773(line=168, offs=22) -- 4793(line=168, offs=42)
 */
 ATSINSmove_void(tmp230, top_loop_89(env0, env1, tmp231, ATSPMVrefarg1(arg1))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4946(line=171, offs=17) -- 4949(line=171, offs=20)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4810(line=169, offs=17) -- 4813(line=169, offs=20)
 */
 /*
 ATSINStmpdec(tmpref232) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4952(line=171, offs=23) -- 4964(line=171, offs=35)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4816(line=169, offs=23) -- 4828(line=169, offs=35)
 */
 ATSINSmove(tmpref232, choose_62(env1, arg0)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4981(line=172, offs=17) -- 4987(line=172, offs=23)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4845(line=170, offs=17) -- 4851(line=170, offs=23)
 */
 /*
 ATSINStmpdec(tmpref233) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4990(line=172, offs=26) -- 5007(line=172, offs=43)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4854(line=170, offs=26) -- 4871(line=170, offs=43)
 */
 ATSINSmove(tmpref233, ATSCNTRB_056_HX_056_intinf_vt__pow_int_int__100__1(arg0, env0)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5024(line=173, offs=17) -- 5034(line=173, offs=27)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4888(line=171, offs=17) -- 4898(line=171, offs=27)
 */
 /*
 ATSINStmpdec(tmpref247) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5051(line=173, offs=44) -- 5056(line=173, offs=49)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4915(line=171, offs=44) -- 4920(line=171, offs=49)
 */
 ATSINSmove(tmp248, atspre_g1int_sub_int(env1, arg0)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5037(line=173, offs=30) -- 5065(line=173, offs=58)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4901(line=171, offs=30) -- 4929(line=171, offs=58)
 */
 ATSINSmove(tmpref247, negate_if_odd_92(tmp248, tmpref233)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5082(line=174, offs=17) -- 5092(line=174, offs=27)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4946(line=172, offs=17) -- 4956(line=172, offs=27)
 */
 /*
 ATSINStmpdec(tmpref249) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5095(line=174, offs=30) -- 5131(line=174, offs=66)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4959(line=172, offs=30) -- 4995(line=172, offs=66)
 */
 ATSINSmove(tmpref249, ATSCNTRB_056_HX_056_intinf_vt__mul_intinf0_intinf1__103__1(tmpref232, ATSPMVrefarg0(tmpref247))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5160(line=175, offs=29) -- 5196(line=175, offs=65)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5024(line=173, offs=29) -- 5060(line=173, offs=65)
 */
 ATSINSmove(tmp254, ATSCNTRB_056_HX_056_intinf_vt__add_intinf0_intinf1__6__3(ATSderef(arg1, atstkind_type(atstype_ptrk)), ATSPMVrefarg0(tmpref249))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5153(line=175, offs=22) -- 5196(line=175, offs=65)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5017(line=173, offs=22) -- 5060(line=173, offs=65)
 */
 ATSINSstore(ATSderef(arg1, atstkind_type(atstype_ptrk)), tmp254) ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5218(line=176, offs=22) -- 5240(line=176, offs=44)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5082(line=174, offs=22) -- 5104(line=174, offs=44)
 */
 ATSINSmove_void(tmp257, ATSCNTRB_056_HX_056_intinf_vt__intinf_free__12__4(tmpref247)) ;
 
@@ -6356,12 +6356,12 @@
 */
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5263(line=177, offs=22) -- 5285(line=177, offs=44)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5127(line=175, offs=22) -- 5149(line=175, offs=44)
 */
 ATSINSmove_void(tmpret213, ATSCNTRB_056_HX_056_intinf_vt__intinf_free__12__5(tmpref249)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4712(line=163, offs=19) -- 5298(line=178, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4576(line=161, offs=19) -- 5162(line=176, offs=12)
 */
 /*
 INSletpop()
@@ -6475,7 +6475,7 @@
 } /* end of [ATSLIB_056_prelude__ptr_alloc__17__21] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4729(line=164, offs=16) -- 4874(line=168, offs=31)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4593(line=162, offs=16) -- 4738(line=166, offs=31)
 */
 /*
 local: 
@@ -6494,32 +6494,32 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4729(line=164, offs=16) -- 4874(line=168, offs=31)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4593(line=162, offs=16) -- 4738(line=166, offs=31)
 */
 ATSINSflab(__patsflab_negate_if_odd_92):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4792(line=165, offs=18) -- 4797(line=165, offs=23)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4656(line=163, offs=18) -- 4661(line=163, offs=23)
 */
 ATSINSmove(tmp225, atspre_g0int_mod_int(arg0, ATSPMVi0nt(2))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4792(line=165, offs=18) -- 4801(line=165, offs=27)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4656(line=163, offs=18) -- 4665(line=163, offs=27)
 */
 ATSINSmove(tmp220, ATSLIB_056_prelude__eq_g0int_int__93__1(tmp225, ATSPMVi0nt(0))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4789(line=165, offs=15) -- 4874(line=168, offs=31)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4653(line=163, offs=15) -- 4738(line=166, offs=31)
 */
 ATSif(
 tmp220
 ) ATSthen() {
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4823(line=166, offs=17) -- 4824(line=166, offs=18)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4687(line=164, offs=17) -- 4688(line=164, offs=18)
 */
 ATSINSmove(tmpret219, arg1) ;
 } ATSelse() {
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4860(line=168, offs=17) -- 4873(line=168, offs=30)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 4724(line=166, offs=17) -- 4737(line=166, offs=30)
 */
 ATSINSmove(tmpret219, ATSCNTRB_056_HX_056_intinf_vt__neg_intinf0__98__1(arg1)) ;
 
@@ -7324,7 +7324,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: 5701(line=193, offs=4) -- 6245(line=213, offs=6)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5565(line=191, offs=4) -- 6109(line=211, offs=6)
 */
 /*
 local: stirling2_79$0(level=0)
@@ -7343,11 +7343,11 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5701(line=193, offs=4) -- 6245(line=213, offs=6)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5565(line=191, offs=4) -- 6109(line=211, offs=6)
 */
 ATSINSflab(__patsflab_bell_110):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5739(line=194, offs=3) -- 6245(line=213, offs=6)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5603(line=192, offs=3) -- 6109(line=211, offs=6)
 */
 /*
 letpush(beg)
@@ -7357,7 +7357,7 @@
 */
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6095(line=205, offs=5) -- 6239(line=212, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5959(line=203, offs=5) -- 6103(line=210, offs=10)
 */
 ATScaseof_beg()
 /*
@@ -7365,15 +7365,15 @@
 */
 ATSbranch_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6114(line=206, offs=9) -- 6115(line=206, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5978(line=204, offs=9) -- 5979(line=204, offs=10)
 */
 ATSINSlab(__atstmplab42):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5714(line=193, offs=17) -- 5715(line=193, offs=18)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5578(line=191, offs=17) -- 5579(line=191, offs=18)
 */
 ATSifnthen(ATSCKpat_int(arg0, ATSPMVint(0))) { ATSINSgoto(__atstmplab44) ; } ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6115(line=206, offs=10) -- 6115(line=206, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5979(line=204, offs=10) -- 5979(line=204, offs=10)
 */
 ATSINSlab(__atstmplab43):
 /*
@@ -7383,7 +7383,7 @@
 ibranch-mbody:
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6119(line=206, offs=14) -- 6132(line=206, offs=27)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5983(line=204, offs=14) -- 5996(line=204, offs=27)
 */
 ATSINSmove(tmpret271, ATSCNTRB_056_HX_056_intinf_vt__intinf_make_int__15__22(ATSPMVi0nt(1))) ;
 
@@ -7391,7 +7391,7 @@
 
 ATSbranch_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6142(line=207, offs=10) -- 6142(line=207, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6006(line=205, offs=10) -- 6006(line=205, offs=10)
 */
 ATSINSlab(__atstmplab44):
 /*
@@ -7401,19 +7401,19 @@
 ibranch-mbody:
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6147(line=207, offs=15) -- 6239(line=212, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6011(line=205, offs=15) -- 6103(line=210, offs=10)
 */
 /*
 letpush(beg)
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6163(line=208, offs=13) -- 6166(line=208, offs=16)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6027(line=206, offs=13) -- 6030(line=206, offs=16)
 */
 /*
 ATSINStmpdec(tmpref286) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6192(line=209, offs=18) -- 6208(line=209, offs=34)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6056(line=207, offs=18) -- 6072(line=207, offs=34)
 */
 ATSINSmove_void(tmp287, sum_loop_111(arg0, arg0, ATSPMVrefarg1(ATSPMVptrof(tmpref286)))) ;
 
@@ -7422,11 +7422,11 @@
 */
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6226(line=211, offs=9) -- 6229(line=211, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6090(line=209, offs=9) -- 6093(line=209, offs=12)
 */
 ATSINSmove(tmpret271, tmpref286) ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6147(line=207, offs=15) -- 6239(line=212, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6011(line=205, offs=15) -- 6103(line=210, offs=10)
 */
 /*
 INSletpop()
@@ -7439,7 +7439,7 @@
 ATScaseof_end()
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5739(line=194, offs=3) -- 6245(line=213, offs=6)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5603(line=192, offs=3) -- 6109(line=211, offs=6)
 */
 /*
 INSletpop()
@@ -7449,7 +7449,7 @@
 } /* end of [bell_110] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5751(line=195, offs=9) -- 6085(line=203, offs=10)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5615(line=193, offs=9) -- 5949(line=201, offs=10)
 */
 /*
 local: stirling2_79$0(level=0), sum_loop_111$0(level=1)
@@ -7471,11 +7471,11 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5751(line=195, offs=9) -- 6085(line=203, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5615(line=193, offs=9) -- 5949(line=201, offs=10)
 */
 ATSINSflab(__patsflab_sum_loop_111):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5841(line=196, offs=7) -- 6085(line=203, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5705(line=194, offs=7) -- 5949(line=201, offs=10)
 */
 ATScaseof_beg()
 /*
@@ -7483,15 +7483,15 @@
 */
 ATSbranch_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5862(line=197, offs=11) -- 5863(line=197, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5726(line=195, offs=11) -- 5727(line=195, offs=12)
 */
 ATSINSlab(__atstmplab39):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5788(line=195, offs=46) -- 5789(line=195, offs=47)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5652(line=193, offs=46) -- 5653(line=193, offs=47)
 */
 ATSifnthen(ATSCKpat_int(arg0, ATSPMVint(1))) { ATSINSgoto(__atstmplab41) ; } ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5863(line=197, offs=12) -- 5863(line=197, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5727(line=195, offs=12) -- 5727(line=195, offs=12)
 */
 ATSINSlab(__atstmplab40):
 /*
@@ -7501,23 +7501,23 @@
 ibranch-mbody:
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5874(line=197, offs=23) -- 5889(line=197, offs=38)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5738(line=195, offs=23) -- 5753(line=195, offs=38)
 */
 ATSINSmove(tmp273, stirling2_79(env0, ATSPMVi0nt(1))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5867(line=197, offs=16) -- 5889(line=197, offs=38)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5731(line=195, offs=16) -- 5753(line=195, offs=38)
 */
 ATSINSstore(ATSderef(arg1, atstkind_type(atstype_ptrk)), tmp273) ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5867(line=197, offs=16) -- 5889(line=197, offs=38)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5731(line=195, offs=16) -- 5753(line=195, offs=38)
 */
 ATSINSmove_void(tmpret272, ATSPMVempty()) ;
 ATSbranch_end()
 
 ATSbranch_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5901(line=198, offs=12) -- 5901(line=198, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5765(line=196, offs=12) -- 5765(line=196, offs=12)
 */
 ATSINSlab(__atstmplab41):
 /*
@@ -7527,39 +7527,39 @@
 ibranch-mbody:
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5906(line=198, offs=17) -- 6085(line=203, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5770(line=196, offs=17) -- 5949(line=201, offs=10)
 */
 /*
 letpush(beg)
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5936(line=199, offs=29) -- 5941(line=199, offs=34)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5800(line=197, offs=29) -- 5805(line=197, offs=34)
 */
 ATSINSmove(tmp275, atspre_g1int_sub_int(arg0, ATSPMVi0nt(1))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5927(line=199, offs=20) -- 5947(line=199, offs=40)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5791(line=197, offs=20) -- 5811(line=197, offs=40)
 */
 ATSINSmove_void(tmp274, sum_loop_111(env0, tmp275, ATSPMVrefarg1(arg1))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5962(line=200, offs=15) -- 5965(line=200, offs=18)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5826(line=198, offs=15) -- 5829(line=198, offs=18)
 */
 /*
 ATSINStmpdec(tmpref276) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5968(line=200, offs=21) -- 5983(line=200, offs=36)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5832(line=198, offs=21) -- 5847(line=198, offs=36)
 */
 ATSINSmove(tmpref276, stirling2_79(env0, arg0)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6010(line=201, offs=27) -- 6039(line=201, offs=56)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5874(line=199, offs=27) -- 5903(line=199, offs=56)
 */
 ATSINSmove(tmp277, ATSCNTRB_056_HX_056_intinf_vt__add_intinf0_intinf1__6__4(ATSderef(arg1, atstkind_type(atstype_ptrk)), ATSPMVrefarg0(tmpref276))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6003(line=201, offs=20) -- 6039(line=201, offs=56)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5867(line=199, offs=20) -- 5903(line=199, offs=56)
 */
 ATSINSstore(ATSderef(arg1, atstkind_type(atstype_ptrk)), tmp277) ;
 /*
@@ -7567,12 +7567,12 @@
 */
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6059(line=202, offs=20) -- 6074(line=202, offs=35)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5923(line=200, offs=20) -- 5938(line=200, offs=35)
 */
 ATSINSmove_void(tmpret272, ATSCNTRB_056_HX_056_intinf_vt__intinf_free__12__7(tmpref276)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5906(line=198, offs=17) -- 6085(line=203, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 5770(line=196, offs=17) -- 5949(line=201, offs=10)
 */
 /*
 INSletpop()
@@ -7800,7 +7800,7 @@
 } /* end of [ATSLIB_056_prelude__ptr_alloc__17__23] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6250(line=215, offs=4) -- 6679(line=232, offs=6)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6114(line=213, offs=4) -- 6543(line=230, offs=6)
 */
 /*
 local: choose_62$0(level=0)
@@ -7819,23 +7819,23 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6250(line=215, offs=4) -- 6679(line=232, offs=6)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6114(line=213, offs=4) -- 6543(line=230, offs=6)
 */
 ATSINSflab(__patsflab_max_regions_116):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6295(line=216, offs=3) -- 6679(line=232, offs=6)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6159(line=214, offs=3) -- 6543(line=230, offs=6)
 */
 /*
 letpush(beg)
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6629(line=228, offs=9) -- 6630(line=228, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6493(line=226, offs=9) -- 6494(line=226, offs=10)
 */
 /*
 ATSINStmpdec(tmpref306) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6652(line=229, offs=14) -- 6662(line=229, offs=24)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6516(line=227, offs=14) -- 6526(line=227, offs=24)
 */
 ATSINSmove_void(tmp307, loop_117(arg0, ATSPMVi0nt(4), ATSPMVrefarg1(ATSPMVptrof(tmpref306)))) ;
 
@@ -7844,11 +7844,11 @@
 */
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6672(line=231, offs=5) -- 6673(line=231, offs=6)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6536(line=229, offs=5) -- 6537(line=229, offs=6)
 */
 ATSINSmove(tmpret288, tmpref306) ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6295(line=216, offs=3) -- 6679(line=232, offs=6)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6159(line=214, offs=3) -- 6543(line=230, offs=6)
 */
 /*
 INSletpop()
@@ -7858,7 +7858,7 @@
 } /* end of [max_regions_116] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6307(line=217, offs=9) -- 6615(line=226, offs=15)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6171(line=215, offs=9) -- 6479(line=224, offs=15)
 */
 /*
 local: choose_62$0(level=0), loop_117$0(level=1)
@@ -7881,68 +7881,68 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6307(line=217, offs=9) -- 6615(line=226, offs=15)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6171(line=215, offs=9) -- 6479(line=224, offs=15)
 */
 ATSINSflab(__patsflab_loop_117):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6383(line=218, offs=10) -- 6388(line=218, offs=15)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6247(line=216, offs=10) -- 6252(line=216, offs=15)
 */
 ATSINSmove(tmp290, ATSLIB_056_prelude__eq_g1int_int__80__3(arg0, ATSPMVi0nt(0))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6380(line=218, offs=7) -- 6615(line=226, offs=15)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6244(line=216, offs=7) -- 6479(line=224, offs=15)
 */
 ATSif(
 tmp290
 ) ATSthen() {
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6409(line=219, offs=16) -- 6422(line=219, offs=29)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6273(line=217, offs=16) -- 6286(line=217, offs=29)
 */
 ATSINSmove(tmp293, ATSCNTRB_056_HX_056_intinf_vt__intinf_make_int__15__23(ATSPMVi0nt(1))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6402(line=219, offs=9) -- 6422(line=219, offs=29)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6266(line=217, offs=9) -- 6286(line=217, offs=29)
 */
 ATSINSstore(ATSderef(arg1, atstkind_type(atstype_ptrk)), tmp293) ;
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6402(line=219, offs=9) -- 6422(line=219, offs=29)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6266(line=217, offs=9) -- 6286(line=217, offs=29)
 */
 ATSINSmove_void(tmpret289, ATSPMVempty()) ;
 } ATSelse() {
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6442(line=221, offs=9) -- 6615(line=226, offs=15)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6306(line=219, offs=9) -- 6479(line=224, offs=15)
 */
 /*
 letpush(beg)
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6470(line=222, offs=25) -- 6475(line=222, offs=30)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6334(line=220, offs=25) -- 6339(line=220, offs=30)
 */
 ATSINSmove(tmp299, atspre_g1int_sub_int(arg0, ATSPMVi0nt(1))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6465(line=222, offs=20) -- 6481(line=222, offs=36)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6329(line=220, offs=20) -- 6345(line=220, offs=36)
 */
 ATSINSmove_void(tmp298, loop_117(env0, tmp299, ATSPMVrefarg1(arg1))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6496(line=223, offs=15) -- 6497(line=223, offs=16)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6360(line=221, offs=15) -- 6361(line=221, offs=16)
 */
 /*
 ATSINStmpdec(tmpref300) ;
 */
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6500(line=223, offs=19) -- 6512(line=223, offs=31)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6364(line=221, offs=19) -- 6376(line=221, offs=31)
 */
 ATSINSmove(tmpref300, choose_62(env0, arg0)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6539(line=224, offs=27) -- 6566(line=224, offs=54)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6403(line=222, offs=27) -- 6430(line=222, offs=54)
 */
 ATSINSmove(tmp301, ATSCNTRB_056_HX_056_intinf_vt__add_intinf0_intinf1__6__5(ATSderef(arg1, atstkind_type(atstype_ptrk)), ATSPMVrefarg0(tmpref300))) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6532(line=224, offs=20) -- 6566(line=224, offs=54)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6396(line=222, offs=20) -- 6430(line=222, offs=54)
 */
 ATSINSstore(ATSderef(arg1, atstkind_type(atstype_ptrk)), tmp301) ;
 /*
@@ -7950,12 +7950,12 @@
 */
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6586(line=225, offs=20) -- 6599(line=225, offs=33)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6450(line=223, offs=20) -- 6463(line=223, offs=33)
 */
 ATSINSmove_void(tmpret289, ATSCNTRB_056_HX_056_intinf_vt__intinf_free__12__8(tmpref300)) ;
 
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6442(line=221, offs=9) -- 6615(line=226, offs=15)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6306(line=219, offs=9) -- 6479(line=224, offs=15)
 */
 /*
 INSletpop()
@@ -8218,7 +8218,7 @@
 } /* end of [ATSCNTRB_056_HX_056_intinf_vt__intinf_free__12__8] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6702(line=234, offs=22) -- 6725(line=235, offs=15)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6566(line=232, offs=22) -- 6589(line=233, offs=15)
 */
 /*
 local: choose_62$0(level=0)
@@ -8235,11 +8235,11 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6691(line=234, offs=11) -- 6725(line=235, offs=15)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6555(line=232, offs=11) -- 6589(line=233, offs=15)
 */
 ATSINSflab(__patsflab_choose_ats):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6713(line=235, offs=3) -- 6725(line=235, offs=15)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6577(line=233, offs=3) -- 6589(line=233, offs=15)
 */
 ATSINSmove(tmpret308, choose_62(arg0, arg1)) ;
 
@@ -8248,7 +8248,7 @@
 } /* end of [choose_ats] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6758(line=237, offs=32) -- 6773(line=238, offs=10)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6622(line=235, offs=32) -- 6637(line=236, offs=10)
 */
 /*
 local: dfact_41$0(level=0)
@@ -8265,11 +8265,11 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6737(line=237, offs=11) -- 6774(line=238, offs=11)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6601(line=235, offs=11) -- 6638(line=236, offs=11)
 */
 ATSINSflab(__patsflab_double_factorial_ats):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6766(line=238, offs=3) -- 6773(line=238, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6630(line=236, offs=3) -- 6637(line=236, offs=10)
 */
 ATSINSmove(tmpret309, dfact_41(arg0)) ;
 
@@ -8278,7 +8278,7 @@
 } /* end of [double_factorial_ats] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6800(line=240, offs=25) -- 6814(line=241, offs=9)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6664(line=238, offs=25) -- 6678(line=239, offs=9)
 */
 /*
 local: fact_34$0(level=0)
@@ -8295,11 +8295,11 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6786(line=240, offs=11) -- 6815(line=241, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6650(line=238, offs=11) -- 6679(line=239, offs=10)
 */
 ATSINSflab(__patsflab_factorial_ats):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6808(line=241, offs=3) -- 6814(line=241, offs=9)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6672(line=239, offs=3) -- 6678(line=239, offs=9)
 */
 ATSINSmove(tmpret310, fact_34(arg0)) ;
 
@@ -8308,7 +8308,7 @@
 } /* end of [factorial_ats] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6839(line=243, offs=23) -- 6856(line=244, offs=12)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6703(line=241, offs=23) -- 6720(line=242, offs=12)
 */
 /*
 local: catalan_50$0(level=0)
@@ -8325,11 +8325,11 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6827(line=243, offs=11) -- 6857(line=244, offs=13)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6691(line=241, offs=11) -- 6721(line=242, offs=13)
 */
 ATSINSflab(__patsflab_catalan_ats):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6847(line=244, offs=3) -- 6856(line=244, offs=12)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6711(line=242, offs=3) -- 6720(line=242, offs=12)
 */
 ATSINSmove(tmpret311, catalan_50(arg0)) ;
 
@@ -8338,7 +8338,7 @@
 } /* end of [catalan_ats] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6886(line=246, offs=28) -- 6908(line=247, offs=17)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6750(line=244, offs=28) -- 6772(line=245, offs=17)
 */
 /*
 local: derangements_0$0(level=0)
@@ -8355,11 +8355,11 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6869(line=246, offs=11) -- 6909(line=247, offs=18)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6733(line=244, offs=11) -- 6773(line=245, offs=18)
 */
 ATSINSflab(__patsflab_derangements_ats):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6894(line=247, offs=3) -- 6908(line=247, offs=17)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6758(line=245, offs=3) -- 6772(line=245, offs=17)
 */
 ATSINSmove(tmpret312, derangements_0(arg0)) ;
 
@@ -8368,7 +8368,7 @@
 } /* end of [derangements_ats] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6938(line=249, offs=28) -- 6967(line=250, offs=21)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6802(line=247, offs=28) -- 6831(line=248, offs=21)
 */
 /*
 local: permutations_42$0(level=0)
@@ -8385,11 +8385,11 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6921(line=249, offs=11) -- 6967(line=250, offs=21)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6785(line=247, offs=11) -- 6831(line=248, offs=21)
 */
 ATSINSflab(__patsflab_permutations_ats):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6949(line=250, offs=3) -- 6967(line=250, offs=21)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6813(line=248, offs=3) -- 6831(line=248, offs=21)
 */
 ATSINSmove(tmpret313, permutations_42(arg0, arg1)) ;
 
@@ -8398,7 +8398,7 @@
 } /* end of [permutations_ats] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6993(line=252, offs=25) -- 7019(line=253, offs=18)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6857(line=250, offs=25) -- 6883(line=251, offs=18)
 */
 /*
 local: stirling2_79$0(level=0)
@@ -8415,11 +8415,11 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6979(line=252, offs=11) -- 7019(line=253, offs=18)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6843(line=250, offs=11) -- 6883(line=251, offs=18)
 */
 ATSINSflab(__patsflab_stirling2_ats):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 7004(line=253, offs=3) -- 7019(line=253, offs=18)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6868(line=251, offs=3) -- 6883(line=251, offs=18)
 */
 ATSINSmove(tmpret314, stirling2_79(arg0, arg1)) ;
 
@@ -8428,7 +8428,7 @@
 } /* end of [stirling2_ats] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 7047(line=255, offs=27) -- 7068(line=256, offs=16)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6911(line=253, offs=27) -- 6932(line=254, offs=16)
 */
 /*
 local: max_regions_116$0(level=0)
@@ -8445,11 +8445,11 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 7031(line=255, offs=11) -- 7069(line=256, offs=17)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6895(line=253, offs=11) -- 6933(line=254, offs=17)
 */
 ATSINSflab(__patsflab_max_regions_ats):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 7055(line=256, offs=3) -- 7068(line=256, offs=16)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6919(line=254, offs=3) -- 6932(line=254, offs=16)
 */
 ATSINSmove(tmpret315, max_regions_116(arg0)) ;
 
@@ -8458,7 +8458,7 @@
 } /* end of [max_regions_ats] */
 
 /*
-/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 7090(line=258, offs=20) -- 7104(line=259, offs=9)
+/home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6954(line=256, offs=20) -- 6968(line=257, offs=9)
 */
 /*
 local: bell_110$0(level=0)
@@ -8475,11 +8475,11 @@
 /* tmpvardeclst(end) */
 ATSfunbody_beg()
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 7081(line=258, offs=11) -- 7105(line=259, offs=10)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6945(line=256, offs=11) -- 6969(line=257, offs=10)
 */
 ATSINSflab(__patsflab_bell_ats):
 /*
-emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 7098(line=259, offs=3) -- 7104(line=259, offs=9)
+emit_instr: loc0 = /home/vanessa/programming/haskell/done/hs-ats/fast-arithmetic/ats-src/combinatorics.dats: 6962(line=257, offs=3) -- 6968(line=257, offs=9)
 */
 ATSINSmove(tmpret316, bell_110(arg0)) ;
 
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.4.0
+version: 0.6.4.1
 license: BSD3
 license-file: LICENSE
 copyright: Copyright: (c) 2018 Vanessa McHale
@@ -8,7 +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.4
-             ghc ==8.6.1
+             ghc ==8.6.2
 bug-reports: https://github.com/vmchale/hs-ats/issues
 synopsis: Fast functions on integers.
 description:
@@ -37,11 +37,6 @@
     type: git
     location: git@github.com:vmchale/hs-ats.git
 
-flag no-integer-gmp
-    description:
-        Disable functions relying on GMP
-    default: False
-
 flag development
     description:
         Enable `-Werror`.
@@ -51,9 +46,11 @@
 library
     exposed-modules:
         Numeric.NumberTheory
+        Numeric.Combinatorics
     c-sources:
         cbits/number-theory.c
         cbits/numerics.c
+        cbits/combinatorics.c
     hs-source-dirs: src
     other-modules:
         Numeric.Common
@@ -63,7 +60,7 @@
     ghc-options: -Wall
     build-depends:
         base >=4.3 && <5,
-        composition-prelude >=1.2.0.0
+        hgmp -any
 
     if impl(ghc >=8.0)
         cc-options: -mtune=native -flto -O3
@@ -71,18 +68,6 @@
     if os(windows)
         buildable: False
 
-    if !flag(no-integer-gmp)
-        exposed-modules:
-            Numeric.Combinatorics
-
-    if !flag(no-integer-gmp)
-        c-sources:
-            cbits/combinatorics.c
-
-    if !flag(no-integer-gmp)
-        build-depends:
-            gmpint -any
-
     if os(windows)
         buildable: False
 
@@ -104,7 +89,7 @@
         fast-arithmetic -any,
         hspec -any,
         QuickCheck -any,
-        arithmoi >=0.6.0.0,
+        arithmoi >=0.4.3.0,
         combinat -any
 
     if flag(development)
@@ -124,8 +109,8 @@
         base -any,
         fast-arithmetic -any,
         criterion -any,
-        arithmoi >=0.6.0.0,
-        combinat >=0.2.9.0
+        arithmoi >=0.4.3.0,
+        combinat -any
 
     if flag(development)
         ghc-options: -Werror
diff --git a/src/Numeric/Combinatorics.hs b/src/Numeric/Combinatorics.hs
--- a/src/Numeric/Combinatorics.hs
+++ b/src/Numeric/Combinatorics.hs
@@ -16,60 +16,66 @@
                              , stirling2
                              ) where
 
-import           Control.Composition
-import           Control.Monad
-import           Data.GMP
 import           Foreign.C
 import           Foreign.Ptr
-import           Foreign.Storable
-import           System.IO.Unsafe    (unsafePerformIO)
+import           Numeric.GMP.Raw.Unsafe (mpz_clear)
+import           Numeric.GMP.Types
+import           Numeric.GMP.Utils
+import           System.IO.Unsafe       (unsafePerformIO)
 
-foreign import ccall unsafe double_factorial_ats :: CInt -> Ptr GMPInt
-foreign import ccall unsafe factorial_ats :: CInt -> Ptr GMPInt
-foreign import ccall unsafe choose_ats :: CInt -> CInt -> Ptr GMPInt
-foreign import ccall unsafe catalan_ats :: CInt -> Ptr GMPInt
-foreign import ccall unsafe derangements_ats :: CInt -> Ptr GMPInt
-foreign import ccall unsafe permutations_ats :: CInt -> CInt -> Ptr GMPInt
-foreign import ccall unsafe max_regions_ats :: CInt -> Ptr GMPInt
-foreign import ccall unsafe stirling2_ats :: CInt -> CInt -> Ptr GMPInt
+foreign import ccall unsafe double_factorial_ats :: CInt -> IO (Ptr MPZ)
+foreign import ccall unsafe factorial_ats :: CInt -> IO (Ptr MPZ)
+foreign import ccall unsafe choose_ats :: CInt -> CInt -> IO (Ptr MPZ)
+foreign import ccall unsafe catalan_ats :: CInt -> IO (Ptr MPZ)
+foreign import ccall unsafe derangements_ats :: CInt -> IO (Ptr MPZ)
+foreign import ccall unsafe permutations_ats :: CInt -> CInt -> IO (Ptr MPZ)
+foreign import ccall unsafe max_regions_ats :: CInt -> IO (Ptr MPZ)
+foreign import ccall unsafe stirling2_ats :: CInt -> CInt -> IO (Ptr MPZ)
 
-helper :: (CInt -> CInt -> Ptr GMPInt) -> Int -> Int -> Integer
-helper f = unsafePerformIO .* (gmpToInteger <=<) . (peek .* on f fromIntegral)
+conjugateMPZ :: (CInt -> IO (Ptr MPZ)) -> Int -> Integer
+conjugateMPZ f n = unsafePerformIO $ do
+    mPtr <- f (fromIntegral n)
+    peekInteger mPtr <* mpz_clear mPtr
 
+conjugateMPZ' :: (CInt -> CInt -> IO (Ptr MPZ)) -> Int -> Int -> Integer
+conjugateMPZ' f n k = unsafePerformIO $ do
+    mPtr <- f (fromIntegral n) (fromIntegral k)
+    peekInteger mPtr <* mpz_clear mPtr
+
 -- | \\( !n \\)
 --
 -- > λ:> derangement <$> [0..10]
 -- > [1,0,1,2,9,44,265,1854,14833,133496,1334961]
 derangement :: Int -> Integer
-derangement = unsafePerformIO . conjugateGMP derangements_ats
+derangement = conjugateMPZ derangements_ats
 
 -- | The @n@th Catalan number, with indexing beginning at @0@.
 --
 -- > λ:> catalan <$> [0..9]
 -- > [1,1,2,5,14,42,132,429,1430,4862]
 catalan :: Int -> Integer
-catalan = unsafePerformIO . conjugateGMP catalan_ats
+catalan = conjugateMPZ catalan_ats
 
 -- | \( \binom{n}{k} \)
 choose :: Int -> Int -> Integer
-choose = helper choose_ats
+choose = conjugateMPZ' choose_ats
 
 permutations :: Int -> Int -> Integer
-permutations = helper permutations_ats
+permutations = conjugateMPZ' permutations_ats
 
 -- | Stirling numbers of the second kind.
 stirling2 :: Int -> Int -> Integer
-stirling2 = helper stirling2_ats
+stirling2 = conjugateMPZ' stirling2_ats
 
 factorial :: Int -> Integer
-factorial = unsafePerformIO . conjugateGMP factorial_ats
+factorial = conjugateMPZ factorial_ats
 
 -- | \( n!! \)
 doubleFactorial :: Int -> Integer
-doubleFactorial = unsafePerformIO . conjugateGMP double_factorial_ats
+doubleFactorial = conjugateMPZ double_factorial_ats
 
 -- | Compute the maximal number of regions obtained by joining \\( n \\) points
 -- about a circle by straight lines. See [here](https://oeis.org/A000127).
 maxRegions :: Int -- ^ \\( n \\)
            -> Integer
-maxRegions = unsafePerformIO . conjugateGMP max_regions_ats
+maxRegions = conjugateMPZ max_regions_ats
diff --git a/test/Spec.hs b/test/Spec.hs
--- a/test/Spec.hs
+++ b/test/Spec.hs
@@ -24,13 +24,6 @@
     where g = (0, 1) : (1, 0) : zipWith step g (tail g)
           step (_, n) (i, m) = (i + 1, i * (n + m))
 
--- FIXME report bug in integer-gmp
-tooBig :: Int -> Int -> Bool
-tooBig x y = go x y >= 2 ^ (16 :: Integer)
-    where
-        go :: Int -> Int -> 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 $
     prop "should agree with the pure Haskell function" $
@@ -68,7 +61,7 @@
             \n -> n < 1 || n > 18 || (derangement n :: Integer) == floor ((fromIntegral (Ext.factorial (fromIntegral n :: Int) :: Integer) :: Double) / exp 1 + 0.5)
     describe "totient" $
         prop "should satisfy Fermat's little theorem" $
-            \a m -> a < 1 || m < 2 || gcd a m /= 1 || tooBig a m || (a ^ totient m) `mod` m == 1
+            \a m -> a < 1 || m < 2 || gcd a m /= 1 || ((a ^ totient (fromIntegral m)) `mod` m == (1 :: Integer))
     describe "striling2" $
         prop "should agree" $
             \n k -> n < 0 || k < 0 || stirling2 n k == Ext.stirling2nd n k
@@ -81,3 +74,7 @@
     describe "permutations" $
         prop "should agree" $
             \n k -> k < 1 || k > n || permutations n k == hsPermutations (fromIntegral n) (fromIntegral k)
+
+    describe "stirling" $
+        prop "should obey the identity I found on Wolfram MathWorld" $
+            \n -> n <= 1 || sum [ ((-1) ^ m) * factorial (m-1) * stirling2 n m | m <- [1..n] ] == 0
