diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -3,11 +3,24 @@
 [![Build Status](https://travis-ci.org/vmchale/fast-combinatorics.svg?branch=master)](https://travis-ci.org/vmchale/fast-combinatorics)
 
 This is a library for fast combinatorics using ATS. As such, make sure
-a C compiler is installed. Build reports from Windows users are always welcome.
+a C compiler is installed, however it may not work on windows.
 
-Currently it is in-progress, being somewhat constrained by the fact that I have
+Currently it is a work-in-progress, being somewhat constrained by the fact that I have
 yet to figure out how to share arbitrary-precision types between ATS and Haskell.
 
+## Benchmarks
+
+| Computation | Version (ATS/Haskell) | Time |
+| ----------- | --------------------- | ---- |
+| `12!` | ATS | 9.301 ns |
+| `12!` | Haskell | 27.84 ns |
+| ``13 `choose` 4`` | ATS | 12.28 ns |
+| ``13 `choose` 4`` | Haskell | 28.38 ns |
+| `isPrime 2017` | ATS | 118.9 ns |
+| `isPrime 2017` | Haskell | 497.3 ns |
+| `3 ^ 7` | ATS | 9.050 ns |
+| `3 ^ 7` | Haskell | 37.02 ns |
+
 ## Building
 
 The Haskell library comes with the C bundled, however you may wish to build from
@@ -28,8 +41,7 @@
 ### Using the ATS library
 
 One of the nice things about a Haskell wrapper is that some of Haskell's
-tooling/libraries may be used. In particular, you may like to interact with the
-library via a REPL, viz.
+tooling/libraries may be used. You may want to try the REPL:
 
 ```bash
  $ cabal new-repl
@@ -38,7 +50,7 @@
 ### Using the Haskell library
 
 You may wish to read the ATS source code for an indication of what sorts of
-things ATS allows us to prove things about our programs, such as proofs of
+things ATS allows us to prove things about our programs, particularly proofs of
 termination.
 
 There are also a few caveats: note that all results and arguments
diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -7,6 +7,7 @@
 #endif
 import qualified Codec.Archive.Tar                     as Tar
 import           Codec.Compression.GZip                (decompress)
+import           Control.Monad                         (when)
 import           Distribution.Simple
 import           Distribution.Simple.Setup
 import           Distribution.Types.HookedBuildInfo
@@ -15,22 +16,27 @@
 import           Network.HTTP.Client.TLS               (tlsManagerSettings)
 import           System.Directory
 
+-- TODO make this pre-configure?
 main = defaultMainWithHooks myHooks
-    where myHooks = simpleUserHooks { preBuild = buildScript
+    where myHooks = simpleUserHooks { preConf = buildScript
                                     , postClean = cleanATS }
 
 cleanATS :: Args -> CleanFlags -> PackageDescription -> () -> IO ()
 cleanATS _ _ _ _ = removeDirectoryRecursive "ATS2-Postiats-include-0.3.8"
 
-buildScript :: Args -> BuildFlags -> IO HookedBuildInfo
+buildScript :: Args -> ConfigFlags -> IO HookedBuildInfo
 buildScript _ _ = do
 
-    putStrLn "Fetching libraries..."
-    manager <- newManager tlsManagerSettings
-    initialRequest <- parseRequest "https://downloads.sourceforge.net/project/ats2-lang/ats2-lang/ats2-postiats-0.3.8/ATS2-Postiats-include-0.3.8.tgz"
-    response <- responseBody <$> httpLbs (initialRequest { method = "GET" }) manager
+    needsSetup <- not <$> doesDirectoryExist "ATS2-Postiats-include-0.3.8"
 
-    putStrLn "Unpacking libraries..."
-    Tar.unpack "." . Tar.read . decompress $ response
+    when needsSetup $ do
+
+        putStrLn "Fetching libraries..."
+        manager <- newManager tlsManagerSettings
+        initialRequest <- parseRequest "https://downloads.sourceforge.net/project/ats2-lang/ats2-lang/ats2-postiats-0.3.8/ATS2-Postiats-include-0.3.8.tgz"
+        response <- responseBody <$> httpLbs (initialRequest { method = "GET" }) manager
+
+        putStrLn "Unpacking libraries..."
+        Tar.unpack "." . Tar.read . decompress $ response
 
     pure emptyHookedBuildInfo
diff --git a/bench/Bench.hs b/bench/Bench.hs
--- a/bench/Bench.hs
+++ b/bench/Bench.hs
@@ -1,26 +1,26 @@
 module Main where
 
 import           Criterion.Main
-import qualified Math.Combinatorics.Binomial  as Ext
-import qualified Math.Combinatorics.Factorial as Ext
 import           Numeric.Combinatorics
-
-hsIsPrime :: Int -> Bool
-hsIsPrime x = null [ y | y <- [2..m], x `mod` y == 0]
-    where m = floor (sqrt (fromIntegral x :: Float))
+import           Numeric.Integer
+import           Numeric.Pure.Combinatorics
 
 main :: IO ()
 main =
     defaultMain [ bgroup "factorial"
                       [ bench "factorial" $ nf factorial 12
-                      , bench "Ext.factorial" $ nf (Ext.factorial :: Int -> Int) 12
+                      , bench "hsFactorial" $ nf hsFactorial 12
                       ]
-                , bgroup "choose"
+                , bgroup "combinations"
                       [ bench "choose" $ nf (13 `choose`) 4
-                      , bench "Ext.choose" $ nf (Ext.choose 13 :: Int -> Int) 4
+                      , bench "hsChoose" $ nf (13 `hsChoose`) 4
                       ]
-                , bgroup "isPrime"
+                , bgroup "primality check"
                       [ bench "isPrime" $ nf isPrime 2017
                       , bench "hsIsPrime" $ nf hsIsPrime 2017
+                      ]
+                , bgroup "integer exponentiation"
+                      [ bench "integerExp" $ nf (integerExp 3) 7
+                      , bench "^" $ nf ((3 :: Int) ^) (7 :: Int)
                       ]
                 ]
diff --git a/cbits/combinatorics-ffi.c b/cbits/combinatorics-ffi.c
new file mode 100644
--- /dev/null
+++ b/cbits/combinatorics-ffi.c
@@ -0,0 +1,965 @@
+/*
+**
+** The C code is generated by [ATS/Postiats-0-3-8]
+** The starting compilation time is: 2017-12-30: 23h:56m
+**
+*/
+
+/*
+** include runtime header files
+*/
+#ifndef _ATS_CCOMP_HEADER_NONE_
+#include "pats_ccomp_config.h"
+#include "pats_ccomp_basics.h"
+#include "pats_ccomp_typedefs.h"
+#include "pats_ccomp_instrset.h"
+#include "pats_ccomp_memalloc.h"
+#ifndef _ATS_CCOMP_EXCEPTION_NONE_
+#include "pats_ccomp_memalloca.h"
+#include "pats_ccomp_exception.h"
+#endif // end of [_ATS_CCOMP_EXCEPTION_NONE_]
+#endif /* _ATS_CCOMP_HEADER_NONE_ */
+
+
+/*
+** include prelude cats files
+*/
+#ifndef _ATS_CCOMP_PRELUDE_NONE_
+//
+#include "prelude/CATS/basics.cats"
+#include "prelude/CATS/integer.cats"
+#include "prelude/CATS/pointer.cats"
+#include "prelude/CATS/integer_long.cats"
+#include "prelude/CATS/integer_size.cats"
+#include "prelude/CATS/integer_short.cats"
+#include "prelude/CATS/bool.cats"
+#include "prelude/CATS/char.cats"
+#include "prelude/CATS/float.cats"
+#include "prelude/CATS/integer_ptr.cats"
+#include "prelude/CATS/integer_fixed.cats"
+#include "prelude/CATS/memory.cats"
+#include "prelude/CATS/string.cats"
+#include "prelude/CATS/strptr.cats"
+//
+#include "prelude/CATS/fprintf.cats"
+//
+#include "prelude/CATS/filebas.cats"
+//
+#include "prelude/CATS/list.cats"
+#include "prelude/CATS/option.cats"
+#include "prelude/CATS/array.cats"
+#include "prelude/CATS/arrayptr.cats"
+#include "prelude/CATS/arrayref.cats"
+#include "prelude/CATS/matrix.cats"
+#include "prelude/CATS/matrixptr.cats"
+//
+#endif /* _ATS_CCOMP_PRELUDE_NONE_ */
+/*
+** for user-supplied prelude
+*/
+#ifdef _ATS_CCOMP_PRELUDE_USER_
+//
+#include _ATS_CCOMP_PRELUDE_USER_
+//
+#endif /* _ATS_CCOMP_PRELUDE_USER_ */
+/*
+** for user2-supplied prelude
+*/
+#ifdef _ATS_CCOMP_PRELUDE_USER2_
+//
+#include _ATS_CCOMP_PRELUDE_USER2_
+//
+#endif /* _ATS_CCOMP_PRELUDE_USER2_ */
+
+/*
+staload-prologues(beg)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/basics.dats: 1636(line=50, offs=1) -- 1675(line=50, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats: 1596(line=49, offs=1) -- 1635(line=49, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/pointer.dats: 1533(line=44, offs=1) -- 1572(line=44, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer_long.dats: 1602(line=49, offs=1) -- 1641(line=49, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer_size.dats: 1597(line=49, offs=1) -- 1636(line=49, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer_short.dats: 1603(line=49, offs=1) -- 1642(line=49, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/char.dats: 1610(line=48, offs=1) -- 1649(line=48, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/float.dats: 1636(line=50, offs=1) -- 1675(line=50, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/string.dats: 1631(line=50, offs=1) -- 1670(line=50, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/strptr.dats: 1629(line=50, offs=1) -- 1668(line=50, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/strptr.dats: 1691(line=54, offs=1) -- 1738(line=54, offs=48)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats: 1596(line=49, offs=1) -- 1635(line=49, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer_ptr.dats: 1601(line=49, offs=1) -- 1640(line=49, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer_fixed.dats: 1603(line=49, offs=1) -- 1642(line=49, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/memory.dats: 1410(line=38, offs=1) -- 1449(line=39, offs=32)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/filebas.dats: 1613(line=49, offs=1) -- 1652(line=50, offs=32)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/filebas.dats: 1675(line=54, offs=1) -- 1721(line=55, offs=39)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats: 1596(line=49, offs=1) -- 1635(line=49, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/filebas.dats: 1744(line=59, offs=1) -- 1789(line=60, offs=38)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/libats/libc/SATS/stdio.sats: 1390(line=36, offs=1) -- 1437(line=39, offs=3)
+*/
+
+#include \
+"libats/libc/CATS/stdio.cats"
+/*
+/usr/local/lib/ats2-postiats-0.3.8/libats/libc/SATS/stdio.sats: 1950(line=69, offs=1) -- 1999(line=71, offs=34)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/libats/libc/SATS/sys/types.sats: 1390(line=36, offs=1) -- 1441(line=39, offs=3)
+*/
+
+#include \
+"libats/libc/CATS/sys/types.cats"
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/filebas.dats: 1871(line=66, offs=1) -- 1918(line=66, offs=48)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/libats/libc/SATS/sys/stat.sats: 1390(line=36, offs=1) -- 1440(line=39, offs=3)
+*/
+
+#include \
+"libats/libc/CATS/sys/stat.cats"
+/*
+/usr/local/lib/ats2-postiats-0.3.8/libats/libc/SATS/sys/stat.sats: 1756(line=58, offs=1) -- 1805(line=60, offs=34)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/libats/libc/SATS/sys/types.sats: 1390(line=36, offs=1) -- 1441(line=39, offs=3)
+*/
+
+#include \
+"libats/libc/CATS/sys/types.cats"
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/filebas.dats: 15552(line=879, offs=1) -- 15589(line=880, offs=30)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/libats/libc/SATS/stdio.sats: 1390(line=36, offs=1) -- 1437(line=39, offs=3)
+*/
+
+#include \
+"libats/libc/CATS/stdio.cats"
+/*
+/usr/local/lib/ats2-postiats-0.3.8/libats/libc/SATS/stdio.sats: 1950(line=69, offs=1) -- 1999(line=71, offs=34)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/libats/libc/SATS/sys/types.sats: 1390(line=36, offs=1) -- 1441(line=39, offs=3)
+*/
+
+#include \
+"libats/libc/CATS/sys/types.cats"
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/list.dats: 1529(line=44, offs=1) -- 1568(line=45, offs=32)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/list.dats: 1569(line=46, offs=1) -- 1615(line=47, offs=39)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/unsafe.dats: 1532(line=44, offs=1) -- 1566(line=44, offs=35)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/list_vt.dats: 1538(line=44, offs=1) -- 1577(line=45, offs=32)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/list_vt.dats: 1578(line=46, offs=1) -- 1624(line=47, offs=39)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/unsafe.dats: 1532(line=44, offs=1) -- 1566(line=44, offs=35)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/SHARE/list_vt_mergesort.dats: 1546(line=44, offs=1) -- 1585(line=44, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/SHARE/list_vt_quicksort.dats: 1546(line=44, offs=1) -- 1585(line=44, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/array.dats: 1534(line=44, offs=1) -- 1573(line=44, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/array.dats: 1574(line=45, offs=1) -- 1616(line=45, offs=43)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/SHARE/array_bsearch.dats: 1531(line=44, offs=1) -- 1570(line=44, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/SHARE/array_quicksort.dats: 1531(line=44, offs=1) -- 1570(line=44, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/arrayptr.dats: 1532(line=44, offs=1) -- 1571(line=44, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/arrayref.dats: 1532(line=44, offs=1) -- 1571(line=44, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/matrix.dats: 1535(line=44, offs=1) -- 1574(line=44, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/matrixptr.dats: 1538(line=44, offs=1) -- 1577(line=44, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/matrixref.dats: 1538(line=44, offs=1) -- 1577(line=44, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/stream.dats: 1523(line=44, offs=1) -- 1562(line=44, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/stream_vt.dats: 1523(line=44, offs=1) -- 1562(line=44, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/tostring.dats: 1528(line=44, offs=1) -- 1567(line=45, offs=32)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/unsafe.dats: 1532(line=44, offs=1) -- 1566(line=44, offs=35)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/checkast.dats: 1531(line=44, offs=1) -- 1570(line=45, offs=32)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/libats/libc/SATS/math.sats: 1380(line=35, offs=1) -- 1426(line=38, offs=3)
+*/
+
+#include \
+"libats/libc/CATS/math.cats"
+/*
+staload-prologues(end)
+*/
+/*
+typedefs-for-tyrecs-and-tysums(beg)
+*/
+/*
+typedefs-for-tyrecs-and-tysums(end)
+*/
+/*
+dynconlst-declaration(beg)
+*/
+/*
+dynconlst-declaration(end)
+*/
+/*
+dyncstlst-declaration(beg)
+*/
+ATSdyncst_mac(atspre_g0int_mul_int)
+ATSdyncst_mac(atspre_g1int_sub_int)
+ATSdyncst_mac(atspre_g1int_mul_int)
+ATSdyncst_mac(atspre_g1int_add_int)
+ATSdyncst_mac(atspre_g0int_div_int)
+/*
+dyncstlst-declaration(end)
+*/
+/*
+dynvalist-implementation(beg)
+*/
+/*
+dynvalist-implementation(end)
+*/
+/*
+exnconlst-declaration(beg)
+*/
+#ifndef _ATS_CCOMP_EXCEPTION_NONE_
+ATSextern()
+atsvoid_t0ype
+the_atsexncon_initize
+(
+  atstype_exnconptr d2c, atstype_string exnmsg
+) ;
+#endif // end of [_ATS_CCOMP_EXCEPTION_NONE_]
+/*
+exnconlst-declaration(end)
+*/
+/*
+extypelst-declaration(beg)
+*/
+/*
+extypelst-declaration(end)
+*/
+/*
+assumelst-declaration(beg)
+*/
+#ifndef _ATS_CCOMP_ASSUME_CHECK_NONE_
+#endif // #ifndef(_ATS_CCOMP_ASSUME_CHECK_NONE_)
+/*
+assumelst-declaration(end)
+*/
+ATSstatic()
+atstkind_t0ype(atstype_int)
+fact_0(atstkind_t0ype(atstype_int)) ;
+
+ATSstatic()
+atstkind_t0ype(atstype_int)
+dfact_3(atstkind_t0ype(atstype_int)) ;
+
+ATSstatic()
+atstkind_t0ype(atstype_int)
+choose_4(atstkind_t0ype(atstype_int), atstkind_t0ype(atstype_int)) ;
+
+ATSstatic()
+atstkind_t0ype(atstype_int)
+numerator_loop_5(atstkind_t0ype(atstype_int), atstkind_t0ype(atstype_int)) ;
+
+#if(0)
+ATSextern()
+atstkind_t0ype(atstype_int)
+choose_ats(atstkind_t0ype(atstype_int), atstkind_t0ype(atstype_int)) ;
+#endif // end of [QUALIFIED]
+
+#if(0)
+ATSextern()
+atstkind_t0ype(atstype_int)
+double_factorial(atstkind_t0ype(atstype_int)) ;
+#endif // end of [QUALIFIED]
+
+#if(0)
+ATSextern()
+atstkind_t0ype(atstype_int)
+factorial_ats(atstkind_t0ype(atstype_int)) ;
+#endif // end of [QUALIFIED]
+
+/*
+/home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 108(line=7, offs=5) -- 205(line=10, offs=28)
+*/
+/*
+local: fact_0$0(level=0)
+global: fact_0$0(level=0)
+local: 
+global: 
+*/
+ATSstatic()
+atstkind_t0ype(atstype_int)
+fact_0(atstkind_t0ype(atstype_int) arg0)
+{
+/* tmpvardeclst(beg) */
+ATStmpdec(apy0, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmpret0, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmp1, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmp2, atstkind_t0ype(atstype_int)) ;
+/* tmpvardeclst(end) */
+/*
+emit_funent_fnxdeclst:
+*/
+ATSfunbody_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 108(line=7, offs=5) -- 205(line=10, offs=28)
+*/
+ATSINSflab(__patsflab_fact_0):
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 154(line=8, offs=3) -- 205(line=10, offs=28)
+*/
+ATScaseof_beg()
+/*
+** ibranchlst-beg
+*/
+ATSbranch_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 171(line=9, offs=7) -- 172(line=9, offs=8)
+*/
+ATSINSlab(__atstmplab0):
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 130(line=7, offs=27) -- 131(line=7, offs=28)
+*/
+ATSifnthen(ATSCKpat_int(arg0, ATSPMVint(0))) { ATSINSgoto(__atstmplab2) ; } ;
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 172(line=9, offs=8) -- 172(line=9, offs=8)
+*/
+ATSINSlab(__atstmplab1):
+/*
+emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
+*/
+/*
+ibranch-mbody:
+*/
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 176(line=9, offs=12) -- 177(line=9, offs=13)
+*/
+ATSINSmove(tmpret0, ATSPMVi0nt(1)) ;
+ATSbranch_end()
+
+ATSbranch_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 185(line=10, offs=8) -- 185(line=10, offs=8)
+*/
+ATSINSlab(__atstmplab2):
+/*
+emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
+*/
+/*
+ibranch-mbody:
+*/
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 195(line=10, offs=18) -- 200(line=10, offs=23)
+*/
+ATSINSmove(tmp2, atspre_g1int_sub_int(arg0, ATSPMVi0nt(1))) ;
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 190(line=10, offs=13) -- 201(line=10, offs=24)
+*/
+ATSINSmove(tmp1, fact_0(tmp2)) ;
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 190(line=10, offs=13) -- 205(line=10, offs=28)
+*/
+ATSINSmove(tmpret0, atspre_g0int_mul_int(tmp1, arg0)) ;
+
+ATSbranch_end()
+
+/*
+** ibranchlst-end
+*/
+ATScaseof_end()
+
+ATSfunbody_end()
+ATSreturn(tmpret0) ;
+/*
+emit_funent_fnxbodylst:
+*/
+} /* end of [fact_0] */
+
+/*
+/home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 211(line=12, offs=5) -- 323(line=16, offs=29)
+*/
+/*
+local: dfact_3$0(level=0)
+global: dfact_3$0(level=0)
+local: 
+global: 
+*/
+ATSstatic()
+atstkind_t0ype(atstype_int)
+dfact_3(atstkind_t0ype(atstype_int) arg0)
+{
+/* tmpvardeclst(beg) */
+ATStmpdec(apy0, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmpret3, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmp4, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmp5, atstkind_t0ype(atstype_int)) ;
+/* tmpvardeclst(end) */
+/*
+emit_funent_fnxdeclst:
+*/
+ATSfunbody_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 211(line=12, offs=5) -- 323(line=16, offs=29)
+*/
+ATSINSflab(__patsflab_dfact_3):
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 258(line=13, offs=3) -- 323(line=16, offs=29)
+*/
+ATScaseof_beg()
+/*
+** ibranchlst-beg
+*/
+ATSbranch_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 275(line=14, offs=7) -- 276(line=14, offs=8)
+*/
+ATSINSlab(__atstmplab3):
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 234(line=12, offs=28) -- 235(line=12, offs=29)
+*/
+ATSifnthen(ATSCKpat_int(arg0, ATSPMVint(0))) { ATSINSgoto(__atstmplab5) ; } ;
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 276(line=14, offs=8) -- 276(line=14, offs=8)
+*/
+ATSINSlab(__atstmplab4):
+/*
+emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
+*/
+/*
+ibranch-mbody:
+*/
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 280(line=14, offs=12) -- 281(line=14, offs=13)
+*/
+ATSINSmove(tmpret3, ATSPMVi0nt(1)) ;
+ATSbranch_end()
+
+ATSbranch_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 288(line=15, offs=7) -- 289(line=15, offs=8)
+*/
+ATSINSlab(__atstmplab5):
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 234(line=12, offs=28) -- 235(line=12, offs=29)
+*/
+ATSifnthen(ATSCKpat_int(arg0, ATSPMVint(1))) { ATSINSgoto(__atstmplab7) ; } ;
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 289(line=15, offs=8) -- 289(line=15, offs=8)
+*/
+ATSINSlab(__atstmplab6):
+/*
+emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
+*/
+/*
+ibranch-mbody:
+*/
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 293(line=15, offs=12) -- 294(line=15, offs=13)
+*/
+ATSINSmove(tmpret3, ATSPMVi0nt(1)) ;
+ATSbranch_end()
+
+ATSbranch_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 302(line=16, offs=8) -- 302(line=16, offs=8)
+*/
+ATSINSlab(__atstmplab7):
+/*
+emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
+*/
+/*
+ibranch-mbody:
+*/
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 317(line=16, offs=23) -- 322(line=16, offs=28)
+*/
+ATSINSmove(tmp5, atspre_g1int_sub_int(arg0, ATSPMVi0nt(2))) ;
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 311(line=16, offs=17) -- 323(line=16, offs=29)
+*/
+ATSINSmove(tmp4, dfact_3(tmp5)) ;
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 307(line=16, offs=13) -- 323(line=16, offs=29)
+*/
+ATSINSmove(tmpret3, atspre_g0int_mul_int(arg0, tmp4)) ;
+
+ATSbranch_end()
+
+/*
+** ibranchlst-end
+*/
+ATScaseof_end()
+
+ATSfunbody_end()
+ATSreturn(tmpret3) ;
+/*
+emit_funent_fnxbodylst:
+*/
+} /* end of [dfact_3] */
+
+/*
+/home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 362(line=19, offs=4) -- 718(line=31, offs=6)
+*/
+/*
+local: fact_0$0(level=0)
+global: fact_0$0(level=0), choose_4$0(level=0)
+local: 
+global: 
+*/
+ATSstatic()
+atstkind_t0ype(atstype_int)
+choose_4(atstkind_t0ype(atstype_int) arg0, atstkind_t0ype(atstype_int) arg1)
+{
+/* tmpvardeclst(beg) */
+ATStmpdec(tmpret6, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmp13, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmp14, atstkind_t0ype(atstype_int)) ;
+/* tmpvardeclst(end) */
+ATSfunbody_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 362(line=19, offs=4) -- 718(line=31, offs=6)
+*/
+ATSINSflab(__patsflab_choose_4):
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 434(line=20, offs=3) -- 718(line=31, offs=6)
+*/
+/*
+letpush(beg)
+*/
+/*
+letpush(end)
+*/
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 630(line=27, offs=5) -- 712(line=30, offs=42)
+*/
+ATScaseof_beg()
+/*
+** ibranchlst-beg
+*/
+ATSbranch_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 649(line=28, offs=9) -- 650(line=28, offs=10)
+*/
+ATSINSlab(__atstmplab13):
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 412(line=19, offs=54) -- 413(line=19, offs=55)
+*/
+ATSifnthen(ATSCKpat_int(arg1, ATSPMVint(0))) { ATSINSgoto(__atstmplab15) ; } ;
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 650(line=28, offs=10) -- 650(line=28, offs=10)
+*/
+ATSINSlab(__atstmplab14):
+/*
+emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
+*/
+/*
+ibranch-mbody:
+*/
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 654(line=28, offs=14) -- 655(line=28, offs=15)
+*/
+ATSINSmove(tmpret6, ATSPMVi0nt(1)) ;
+ATSbranch_end()
+
+ATSbranch_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 664(line=29, offs=9) -- 665(line=29, offs=10)
+*/
+ATSINSlab(__atstmplab15):
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 412(line=19, offs=54) -- 413(line=19, offs=55)
+*/
+ATSifnthen(ATSCKpat_int(arg1, ATSPMVint(1))) { ATSINSgoto(__atstmplab17) ; } ;
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 665(line=29, offs=10) -- 665(line=29, offs=10)
+*/
+ATSINSlab(__atstmplab16):
+/*
+emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
+*/
+/*
+ibranch-mbody:
+*/
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 669(line=29, offs=14) -- 670(line=29, offs=15)
+*/
+ATSINSmove(tmpret6, arg0) ;
+ATSbranch_end()
+
+ATSbranch_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 680(line=30, offs=10) -- 680(line=30, offs=10)
+*/
+ATSINSlab(__atstmplab17):
+/*
+emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
+*/
+/*
+ibranch-mbody:
+*/
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 685(line=30, offs=15) -- 701(line=30, offs=31)
+*/
+ATSINSmove(tmp13, numerator_loop_5(arg0, arg1)) ;
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 705(line=30, offs=35) -- 711(line=30, offs=41)
+*/
+ATSINSmove(tmp14, fact_0(arg1)) ;
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 685(line=30, offs=15) -- 711(line=30, offs=41)
+*/
+ATSINSmove(tmpret6, atspre_g0int_div_int(tmp13, tmp14)) ;
+
+ATSbranch_end()
+
+/*
+** ibranchlst-end
+*/
+ATScaseof_end()
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 434(line=20, offs=3) -- 718(line=31, offs=6)
+*/
+/*
+INSletpop()
+*/
+ATSfunbody_end()
+ATSreturn(tmpret6) ;
+} /* end of [choose_4] */
+
+/*
+/home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 446(line=21, offs=9) -- 620(line=25, offs=52)
+*/
+/*
+local: numerator_loop_5$0(level=1)
+global: numerator_loop_5$0(level=1)
+local: n$4734(1)(HSEapp(HSEcst(atstkind_t0ype); HSEs2exp(S2Eextkind(atstype_int))))
+global: n$4734(1)(HSEapp(HSEcst(atstkind_t0ype); HSEs2exp(S2Eextkind(atstype_int))))
+*/
+ATSstatic()
+atstkind_t0ype(atstype_int)
+numerator_loop_5(atstkind_t0ype(atstype_int) env0, atstkind_t0ype(atstype_int) arg0)
+{
+/* tmpvardeclst(beg) */
+ATStmpdec(tmpret7, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmp8, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmp9, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmp10, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmp11, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmp12, atstkind_t0ype(atstype_int)) ;
+/* tmpvardeclst(end) */
+ATSfunbody_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 446(line=21, offs=9) -- 620(line=25, offs=52)
+*/
+ATSINSflab(__patsflab_numerator_loop_5):
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 514(line=22, offs=7) -- 620(line=25, offs=52)
+*/
+ATScaseof_beg()
+/*
+** ibranchlst-beg
+*/
+ATSbranch_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 535(line=23, offs=11) -- 536(line=23, offs=12)
+*/
+ATSINSlab(__atstmplab8):
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 488(line=21, offs=51) -- 489(line=21, offs=52)
+*/
+ATSifnthen(ATSCKpat_int(arg0, ATSPMVint(1))) { ATSINSgoto(__atstmplab10) ; } ;
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 536(line=23, offs=12) -- 536(line=23, offs=12)
+*/
+ATSINSlab(__atstmplab9):
+/*
+emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
+*/
+/*
+ibranch-mbody:
+*/
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 540(line=23, offs=16) -- 541(line=23, offs=17)
+*/
+ATSINSmove(tmpret7, env0) ;
+ATSbranch_end()
+
+ATSbranch_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 552(line=24, offs=11) -- 553(line=24, offs=12)
+*/
+ATSINSlab(__atstmplab10):
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 488(line=21, offs=51) -- 489(line=21, offs=52)
+*/
+ATSifnthen(ATSCKpat_int(arg0, ATSPMVint(2))) { ATSINSgoto(__atstmplab12) ; } ;
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 553(line=24, offs=12) -- 553(line=24, offs=12)
+*/
+ATSINSlab(__atstmplab11):
+/*
+emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
+*/
+/*
+ibranch-mbody:
+*/
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 558(line=24, offs=17) -- 563(line=24, offs=22)
+*/
+ATSINSmove(tmp8, atspre_g1int_sub_int(env0, ATSPMVi0nt(1))) ;
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 557(line=24, offs=16) -- 568(line=24, offs=27)
+*/
+ATSINSmove(tmpret7, atspre_g1int_mul_int(tmp8, env0)) ;
+
+ATSbranch_end()
+
+ATSbranch_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 580(line=25, offs=12) -- 580(line=25, offs=12)
+*/
+ATSINSlab(__atstmplab12):
+/*
+emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
+*/
+/*
+ibranch-mbody:
+*/
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 586(line=25, offs=18) -- 591(line=25, offs=23)
+*/
+ATSINSmove(tmp10, atspre_g1int_add_int(env0, ATSPMVi0nt(1))) ;
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 586(line=25, offs=18) -- 595(line=25, offs=27)
+*/
+ATSINSmove(tmp9, atspre_g1int_sub_int(tmp10, arg0)) ;
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 614(line=25, offs=46) -- 619(line=25, offs=51)
+*/
+ATSINSmove(tmp12, atspre_g1int_sub_int(arg0, ATSPMVi0nt(1))) ;
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 599(line=25, offs=31) -- 620(line=25, offs=52)
+*/
+ATSINSmove(tmp11, numerator_loop_5(env0, tmp12)) ;
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics.dats: 585(line=25, offs=17) -- 620(line=25, offs=52)
+*/
+ATSINSmove(tmpret7, atspre_g0int_mul_int(tmp9, tmp11)) ;
+
+ATSbranch_end()
+
+/*
+** ibranchlst-end
+*/
+ATScaseof_end()
+
+ATSfunbody_end()
+ATSreturn(tmpret7) ;
+} /* end of [numerator_loop_5] */
+
+/*
+/home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics-ffi.dats: 344(line=18, offs=22) -- 367(line=19, offs=15)
+*/
+/*
+local: choose_4$0(level=0)
+global: fact_0$0(level=0), choose_4$0(level=0), choose_ats$9$0(level=0)
+local: 
+global: 
+*/
+ATSextern()
+atstkind_t0ype(atstype_int)
+choose_ats(atstkind_t0ype(atstype_int) arg0, atstkind_t0ype(atstype_int) arg1)
+{
+/* tmpvardeclst(beg) */
+ATStmpdec(tmpret15, atstkind_t0ype(atstype_int)) ;
+/* tmpvardeclst(end) */
+ATSfunbody_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics-ffi.dats: 333(line=18, offs=11) -- 367(line=19, offs=15)
+*/
+ATSINSflab(__patsflab_choose_ats):
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics-ffi.dats: 355(line=19, offs=3) -- 367(line=19, offs=15)
+*/
+ATSINSmove(tmpret15, choose_4(arg0, arg1)) ;
+
+ATSfunbody_end()
+ATSreturn(tmpret15) ;
+} /* end of [choose_ats] */
+
+/*
+/home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics-ffi.dats: 396(line=21, offs=28) -- 411(line=22, offs=10)
+*/
+/*
+local: dfact_3$0(level=0)
+global: dfact_3$0(level=0), double_factorial$10$0(level=0)
+local: 
+global: 
+*/
+ATSextern()
+atstkind_t0ype(atstype_int)
+double_factorial(atstkind_t0ype(atstype_int) arg0)
+{
+/* tmpvardeclst(beg) */
+ATStmpdec(tmpret16, atstkind_t0ype(atstype_int)) ;
+/* tmpvardeclst(end) */
+ATSfunbody_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics-ffi.dats: 379(line=21, offs=11) -- 412(line=22, offs=11)
+*/
+ATSINSflab(__patsflab_double_factorial):
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics-ffi.dats: 404(line=22, offs=3) -- 411(line=22, offs=10)
+*/
+ATSINSmove(tmpret16, dfact_3(arg0)) ;
+
+ATSfunbody_end()
+ATSreturn(tmpret16) ;
+} /* end of [double_factorial] */
+
+/*
+/home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics-ffi.dats: 438(line=24, offs=25) -- 452(line=25, offs=9)
+*/
+/*
+local: fact_0$0(level=0)
+global: fact_0$0(level=0), factorial_ats$11$0(level=0)
+local: 
+global: 
+*/
+ATSextern()
+atstkind_t0ype(atstype_int)
+factorial_ats(atstkind_t0ype(atstype_int) arg0)
+{
+/* tmpvardeclst(beg) */
+ATStmpdec(tmpret17, atstkind_t0ype(atstype_int)) ;
+/* tmpvardeclst(end) */
+ATSfunbody_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics-ffi.dats: 424(line=24, offs=11) -- 453(line=25, offs=10)
+*/
+ATSINSflab(__patsflab_factorial_ats):
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/combinatorics-ffi.dats: 446(line=25, offs=3) -- 452(line=25, offs=9)
+*/
+ATSINSmove(tmpret17, fact_0(arg0)) ;
+
+ATSfunbody_end()
+ATSreturn(tmpret17) ;
+} /* end of [factorial_ats] */
+
+/*
+** for initialization(dynloading)
+*/
+ATSdynloadflag_minit(_057_home_057_vanessa_057_programming_057_haskell_057_current_057_fast_055_combinatorics_057_ats_055_src_057_combinatorics_055_ffi_056_dats__dynloadflag) ;
+ATSextern()
+atsvoid_t0ype
+_057_home_057_vanessa_057_programming_057_haskell_057_current_057_fast_055_combinatorics_057_ats_055_src_057_combinatorics_055_ffi_056_dats__dynload()
+{
+ATSfunbody_beg()
+ATSdynload(/*void*/)
+ATSdynloadflag_sta(
+_057_home_057_vanessa_057_programming_057_haskell_057_current_057_fast_055_combinatorics_057_ats_055_src_057_combinatorics_055_ffi_056_dats__dynloadflag
+) ;
+ATSif(
+ATSCKiseqz(
+_057_home_057_vanessa_057_programming_057_haskell_057_current_057_fast_055_combinatorics_057_ats_055_src_057_combinatorics_055_ffi_056_dats__dynloadflag
+)
+) ATSthen() {
+ATSdynloadset(_057_home_057_vanessa_057_programming_057_haskell_057_current_057_fast_055_combinatorics_057_ats_055_src_057_combinatorics_055_ffi_056_dats__dynloadflag) ;
+/*
+dynexnlst-initize(beg)
+*/
+/*
+dynexnlst-initize(end)
+*/
+} /* ATSendif */
+ATSfunbody_end()
+ATSreturn_void(tmpret_void) ;
+} /* end of [*_dynload] */
+
+/* ****** ****** */
+
+/* end-of-compilation-unit */
diff --git a/cbits/fast-combinatorics.c b/cbits/fast-combinatorics.c
deleted file mode 100644
--- a/cbits/fast-combinatorics.c
+++ /dev/null
@@ -1,1426 +0,0 @@
-/*
-**
-** The C code is generated by [ATS/Postiats-0-3-8]
-** The starting compilation time is: 2017-12-30: 17h:55m
-**
-*/
-
-/*
-** include runtime header files
-*/
-#ifndef _ATS_CCOMP_HEADER_NONE_
-#include "pats_ccomp_config.h"
-#include "pats_ccomp_basics.h"
-#include "pats_ccomp_typedefs.h"
-#include "pats_ccomp_instrset.h"
-#include "pats_ccomp_memalloc.h"
-#ifndef _ATS_CCOMP_EXCEPTION_NONE_
-#include "pats_ccomp_memalloca.h"
-#include "pats_ccomp_exception.h"
-#endif // end of [_ATS_CCOMP_EXCEPTION_NONE_]
-#endif /* _ATS_CCOMP_HEADER_NONE_ */
-
-
-/*
-** include prelude cats files
-*/
-#ifndef _ATS_CCOMP_PRELUDE_NONE_
-//
-#include "prelude/CATS/basics.cats"
-#include "prelude/CATS/integer.cats"
-#include "prelude/CATS/pointer.cats"
-#include "prelude/CATS/integer_long.cats"
-#include "prelude/CATS/integer_size.cats"
-#include "prelude/CATS/integer_short.cats"
-#include "prelude/CATS/bool.cats"
-#include "prelude/CATS/char.cats"
-#include "prelude/CATS/float.cats"
-#include "prelude/CATS/integer_ptr.cats"
-#include "prelude/CATS/integer_fixed.cats"
-#include "prelude/CATS/memory.cats"
-#include "prelude/CATS/string.cats"
-#include "prelude/CATS/strptr.cats"
-//
-#include "prelude/CATS/fprintf.cats"
-//
-#include "prelude/CATS/filebas.cats"
-//
-#include "prelude/CATS/list.cats"
-#include "prelude/CATS/option.cats"
-#include "prelude/CATS/array.cats"
-#include "prelude/CATS/arrayptr.cats"
-#include "prelude/CATS/arrayref.cats"
-#include "prelude/CATS/matrix.cats"
-#include "prelude/CATS/matrixptr.cats"
-//
-#endif /* _ATS_CCOMP_PRELUDE_NONE_ */
-/*
-** for user-supplied prelude
-*/
-#ifdef _ATS_CCOMP_PRELUDE_USER_
-//
-#include _ATS_CCOMP_PRELUDE_USER_
-//
-#endif /* _ATS_CCOMP_PRELUDE_USER_ */
-/*
-** for user2-supplied prelude
-*/
-#ifdef _ATS_CCOMP_PRELUDE_USER2_
-//
-#include _ATS_CCOMP_PRELUDE_USER2_
-//
-#endif /* _ATS_CCOMP_PRELUDE_USER2_ */
-
-/*
-staload-prologues(beg)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/basics.dats: 1636(line=50, offs=1) -- 1675(line=50, offs=40)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats: 1596(line=49, offs=1) -- 1635(line=49, offs=40)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/pointer.dats: 1533(line=44, offs=1) -- 1572(line=44, offs=40)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer_long.dats: 1602(line=49, offs=1) -- 1641(line=49, offs=40)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer_size.dats: 1597(line=49, offs=1) -- 1636(line=49, offs=40)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer_short.dats: 1603(line=49, offs=1) -- 1642(line=49, offs=40)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/char.dats: 1610(line=48, offs=1) -- 1649(line=48, offs=40)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/float.dats: 1636(line=50, offs=1) -- 1675(line=50, offs=40)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/string.dats: 1631(line=50, offs=1) -- 1670(line=50, offs=40)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/strptr.dats: 1629(line=50, offs=1) -- 1668(line=50, offs=40)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/strptr.dats: 1691(line=54, offs=1) -- 1738(line=54, offs=48)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats: 1596(line=49, offs=1) -- 1635(line=49, offs=40)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer_ptr.dats: 1601(line=49, offs=1) -- 1640(line=49, offs=40)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer_fixed.dats: 1603(line=49, offs=1) -- 1642(line=49, offs=40)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/memory.dats: 1410(line=38, offs=1) -- 1449(line=39, offs=32)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/filebas.dats: 1613(line=49, offs=1) -- 1652(line=50, offs=32)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/filebas.dats: 1675(line=54, offs=1) -- 1721(line=55, offs=39)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats: 1596(line=49, offs=1) -- 1635(line=49, offs=40)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/filebas.dats: 1744(line=59, offs=1) -- 1789(line=60, offs=38)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/libats/libc/SATS/stdio.sats: 1390(line=36, offs=1) -- 1437(line=39, offs=3)
-*/
-
-#include \
-"libats/libc/CATS/stdio.cats"
-/*
-/usr/local/lib/ats2-postiats-0.3.8/libats/libc/SATS/stdio.sats: 1950(line=69, offs=1) -- 1999(line=71, offs=34)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/libats/libc/SATS/sys/types.sats: 1390(line=36, offs=1) -- 1441(line=39, offs=3)
-*/
-
-#include \
-"libats/libc/CATS/sys/types.cats"
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/filebas.dats: 1871(line=66, offs=1) -- 1918(line=66, offs=48)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/libats/libc/SATS/sys/stat.sats: 1390(line=36, offs=1) -- 1440(line=39, offs=3)
-*/
-
-#include \
-"libats/libc/CATS/sys/stat.cats"
-/*
-/usr/local/lib/ats2-postiats-0.3.8/libats/libc/SATS/sys/stat.sats: 1756(line=58, offs=1) -- 1805(line=60, offs=34)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/libats/libc/SATS/sys/types.sats: 1390(line=36, offs=1) -- 1441(line=39, offs=3)
-*/
-
-#include \
-"libats/libc/CATS/sys/types.cats"
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/filebas.dats: 15552(line=879, offs=1) -- 15589(line=880, offs=30)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/libats/libc/SATS/stdio.sats: 1390(line=36, offs=1) -- 1437(line=39, offs=3)
-*/
-
-#include \
-"libats/libc/CATS/stdio.cats"
-/*
-/usr/local/lib/ats2-postiats-0.3.8/libats/libc/SATS/stdio.sats: 1950(line=69, offs=1) -- 1999(line=71, offs=34)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/libats/libc/SATS/sys/types.sats: 1390(line=36, offs=1) -- 1441(line=39, offs=3)
-*/
-
-#include \
-"libats/libc/CATS/sys/types.cats"
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/list.dats: 1529(line=44, offs=1) -- 1568(line=45, offs=32)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/list.dats: 1569(line=46, offs=1) -- 1615(line=47, offs=39)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/unsafe.dats: 1532(line=44, offs=1) -- 1566(line=44, offs=35)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/list_vt.dats: 1538(line=44, offs=1) -- 1577(line=45, offs=32)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/list_vt.dats: 1578(line=46, offs=1) -- 1624(line=47, offs=39)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/unsafe.dats: 1532(line=44, offs=1) -- 1566(line=44, offs=35)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/SHARE/list_vt_mergesort.dats: 1546(line=44, offs=1) -- 1585(line=44, offs=40)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/SHARE/list_vt_quicksort.dats: 1546(line=44, offs=1) -- 1585(line=44, offs=40)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/array.dats: 1534(line=44, offs=1) -- 1573(line=44, offs=40)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/array.dats: 1574(line=45, offs=1) -- 1616(line=45, offs=43)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/SHARE/array_bsearch.dats: 1531(line=44, offs=1) -- 1570(line=44, offs=40)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/SHARE/array_quicksort.dats: 1531(line=44, offs=1) -- 1570(line=44, offs=40)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/arrayptr.dats: 1532(line=44, offs=1) -- 1571(line=44, offs=40)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/arrayref.dats: 1532(line=44, offs=1) -- 1571(line=44, offs=40)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/matrix.dats: 1535(line=44, offs=1) -- 1574(line=44, offs=40)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/matrixptr.dats: 1538(line=44, offs=1) -- 1577(line=44, offs=40)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/matrixref.dats: 1538(line=44, offs=1) -- 1577(line=44, offs=40)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/stream.dats: 1523(line=44, offs=1) -- 1562(line=44, offs=40)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/stream_vt.dats: 1523(line=44, offs=1) -- 1562(line=44, offs=40)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/tostring.dats: 1528(line=44, offs=1) -- 1567(line=45, offs=32)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/unsafe.dats: 1532(line=44, offs=1) -- 1566(line=44, offs=35)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/checkast.dats: 1531(line=44, offs=1) -- 1570(line=45, offs=32)
-*/
-/*
-/usr/local/lib/ats2-postiats-0.3.8/libats/libc/SATS/math.sats: 1380(line=35, offs=1) -- 1426(line=38, offs=3)
-*/
-
-#include \
-"libats/libc/CATS/math.cats"
-/*
-staload-prologues(end)
-*/
-/*
-typedefs-for-tyrecs-and-tysums(beg)
-*/
-/*
-typedefs-for-tyrecs-and-tysums(end)
-*/
-/*
-dynconlst-declaration(beg)
-*/
-/*
-dynconlst-declaration(end)
-*/
-/*
-dyncstlst-declaration(beg)
-*/
-ATSdyncst_mac(atspre_g0int_mul_int)
-ATSdyncst_mac(atspre_g1int_sub_int)
-ATSdyncst_mac(atspre_g1int_mul_int)
-ATSdyncst_mac(atspre_g1int_add_int)
-ATSdyncst_mac(atspre_g0int_div_int)
-ATSdyncst_mac(atspre_g0float2int_float_int)
-ATSdyncst_mac(atslib_libats_libc_sqrt_float)
-ATSdyncst_mac(atspre_g0int2float_int_float)
-ATSdyncst_mac(atspre_g0int2int_int_int)
-ATSdyncst_mac(atspre_g0int_lte_int)
-ATSdyncst_mac(atspre_g0int_eq_int)
-ATSdyncst_mac(atspre_g0int_mod_int)
-/*
-dyncstlst-declaration(end)
-*/
-/*
-dynvalist-implementation(beg)
-*/
-/*
-dynvalist-implementation(end)
-*/
-/*
-exnconlst-declaration(beg)
-*/
-#ifndef _ATS_CCOMP_EXCEPTION_NONE_
-ATSextern()
-atsvoid_t0ype
-the_atsexncon_initize
-(
-  atstype_exnconptr d2c, atstype_string exnmsg
-) ;
-#endif // end of [_ATS_CCOMP_EXCEPTION_NONE_]
-/*
-exnconlst-declaration(end)
-*/
-/*
-extypelst-declaration(beg)
-*/
-/*
-extypelst-declaration(end)
-*/
-/*
-assumelst-declaration(beg)
-*/
-#ifndef _ATS_CCOMP_ASSUME_CHECK_NONE_
-#endif // #ifndef(_ATS_CCOMP_ASSUME_CHECK_NONE_)
-/*
-assumelst-declaration(end)
-*/
-ATSstatic()
-atstkind_t0ype(atstype_int)
-fact_0(atstkind_t0ype(atstype_int)) ;
-
-ATSstatic()
-atstkind_t0ype(atstype_int)
-dfact_3(atstkind_t0ype(atstype_int)) ;
-
-ATSstatic()
-atstkind_t0ype(atstype_int)
-choose_4(atstkind_t0ype(atstype_int), atstkind_t0ype(atstype_int)) ;
-
-ATSstatic()
-atstkind_t0ype(atstype_int)
-numerator_loop_5(atstkind_t0ype(atstype_int), atstkind_t0ype(atstype_int)) ;
-
-ATSstatic()
-atstkind_t0ype(atstype_bool)
-is_prime_9(atstkind_t0ype(atstype_int)) ;
-
-ATSstatic()
-atstkind_t0ype(atstype_bool)
-loop_11(atstkind_t0ype(atstype_int), atstkind_t0ype(atstype_int), atstkind_t0ype(atstype_int)) ;
-
-#if(0)
-#if(0)
-ATSextern()
-atstkind_t0ype(atstype_bool)
-ATSLIB_056_prelude__lte_g0int_int__12(atstkind_t0ype(atstyvar_type(tk)), atstkind_t0ype(atstype_int)) ;
-#endif // end of [QUALIFIED]
-#endif // end of [TEMPLATE]
-
-ATSstatic()
-atstkind_t0ype(atstype_bool)
-ATSLIB_056_prelude__lte_g0int_int__12__1(atstkind_t0ype(atstype_int), atstkind_t0ype(atstype_int)) ;
-
-#if(0)
-#if(0)
-ATSextern()
-atstkind_t0ype(atstype_bool)
-ATSLIB_056_prelude__eq_g0int_int__16(atstkind_t0ype(atstyvar_type(tk)), atstkind_t0ype(atstype_int)) ;
-#endif // end of [QUALIFIED]
-#endif // end of [TEMPLATE]
-
-ATSstatic()
-atstkind_t0ype(atstype_bool)
-ATSLIB_056_prelude__eq_g0int_int__16__1(atstkind_t0ype(atstype_int), atstkind_t0ype(atstype_int)) ;
-
-#if(0)
-ATSextern()
-atstkind_t0ype(atstype_int)
-choose_ats(atstkind_t0ype(atstype_int), atstkind_t0ype(atstype_int)) ;
-#endif // end of [QUALIFIED]
-
-#if(0)
-ATSextern()
-atstkind_t0ype(atstype_int)
-double_factorial(atstkind_t0ype(atstype_int)) ;
-#endif // end of [QUALIFIED]
-
-#if(0)
-ATSextern()
-atstkind_t0ype(atstype_bool)
-is_prime_ats(atstkind_t0ype(atstype_int)) ;
-#endif // end of [QUALIFIED]
-
-#if(0)
-ATSextern()
-atstkind_t0ype(atstype_int)
-factorial_ats(atstkind_t0ype(atstype_int)) ;
-#endif // end of [QUALIFIED]
-
-/*
-/home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 187(line=9, offs=5) -- 284(line=12, offs=28)
-*/
-/*
-local: fact_0$0(level=0)
-global: fact_0$0(level=0)
-local: 
-global: 
-*/
-ATSstatic()
-atstkind_t0ype(atstype_int)
-fact_0(atstkind_t0ype(atstype_int) arg0)
-{
-/* tmpvardeclst(beg) */
-ATStmpdec(apy0, atstkind_t0ype(atstype_int)) ;
-ATStmpdec(tmpret0, atstkind_t0ype(atstype_int)) ;
-ATStmpdec(tmp1, atstkind_t0ype(atstype_int)) ;
-ATStmpdec(tmp2, atstkind_t0ype(atstype_int)) ;
-/* tmpvardeclst(end) */
-/*
-emit_funent_fnxdeclst:
-*/
-ATSfunbody_beg()
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 187(line=9, offs=5) -- 284(line=12, offs=28)
-*/
-ATSINSflab(__patsflab_fact_0):
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 233(line=10, offs=3) -- 284(line=12, offs=28)
-*/
-ATScaseof_beg()
-/*
-** ibranchlst-beg
-*/
-ATSbranch_beg()
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 250(line=11, offs=7) -- 251(line=11, offs=8)
-*/
-ATSINSlab(__atstmplab0):
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 209(line=9, offs=27) -- 210(line=9, offs=28)
-*/
-ATSifnthen(ATSCKpat_int(arg0, ATSPMVint(0))) { ATSINSgoto(__atstmplab2) ; } ;
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 251(line=11, offs=8) -- 251(line=11, offs=8)
-*/
-ATSINSlab(__atstmplab1):
-/*
-emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
-*/
-/*
-ibranch-mbody:
-*/
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 255(line=11, offs=12) -- 256(line=11, offs=13)
-*/
-ATSINSmove(tmpret0, ATSPMVi0nt(1)) ;
-ATSbranch_end()
-
-ATSbranch_beg()
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 264(line=12, offs=8) -- 264(line=12, offs=8)
-*/
-ATSINSlab(__atstmplab2):
-/*
-emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
-*/
-/*
-ibranch-mbody:
-*/
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 274(line=12, offs=18) -- 279(line=12, offs=23)
-*/
-ATSINSmove(tmp2, atspre_g1int_sub_int(arg0, ATSPMVi0nt(1))) ;
-
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 269(line=12, offs=13) -- 280(line=12, offs=24)
-*/
-ATSINSmove(tmp1, fact_0(tmp2)) ;
-
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 269(line=12, offs=13) -- 284(line=12, offs=28)
-*/
-ATSINSmove(tmpret0, atspre_g0int_mul_int(tmp1, arg0)) ;
-
-ATSbranch_end()
-
-/*
-** ibranchlst-end
-*/
-ATScaseof_end()
-
-ATSfunbody_end()
-ATSreturn(tmpret0) ;
-/*
-emit_funent_fnxbodylst:
-*/
-} /* end of [fact_0] */
-
-/*
-/home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 290(line=14, offs=5) -- 402(line=18, offs=29)
-*/
-/*
-local: dfact_3$0(level=0)
-global: dfact_3$0(level=0)
-local: 
-global: 
-*/
-ATSstatic()
-atstkind_t0ype(atstype_int)
-dfact_3(atstkind_t0ype(atstype_int) arg0)
-{
-/* tmpvardeclst(beg) */
-ATStmpdec(apy0, atstkind_t0ype(atstype_int)) ;
-ATStmpdec(tmpret3, atstkind_t0ype(atstype_int)) ;
-ATStmpdec(tmp4, atstkind_t0ype(atstype_int)) ;
-ATStmpdec(tmp5, atstkind_t0ype(atstype_int)) ;
-/* tmpvardeclst(end) */
-/*
-emit_funent_fnxdeclst:
-*/
-ATSfunbody_beg()
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 290(line=14, offs=5) -- 402(line=18, offs=29)
-*/
-ATSINSflab(__patsflab_dfact_3):
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 337(line=15, offs=3) -- 402(line=18, offs=29)
-*/
-ATScaseof_beg()
-/*
-** ibranchlst-beg
-*/
-ATSbranch_beg()
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 354(line=16, offs=7) -- 355(line=16, offs=8)
-*/
-ATSINSlab(__atstmplab3):
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 313(line=14, offs=28) -- 314(line=14, offs=29)
-*/
-ATSifnthen(ATSCKpat_int(arg0, ATSPMVint(0))) { ATSINSgoto(__atstmplab5) ; } ;
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 355(line=16, offs=8) -- 355(line=16, offs=8)
-*/
-ATSINSlab(__atstmplab4):
-/*
-emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
-*/
-/*
-ibranch-mbody:
-*/
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 359(line=16, offs=12) -- 360(line=16, offs=13)
-*/
-ATSINSmove(tmpret3, ATSPMVi0nt(1)) ;
-ATSbranch_end()
-
-ATSbranch_beg()
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 367(line=17, offs=7) -- 368(line=17, offs=8)
-*/
-ATSINSlab(__atstmplab5):
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 313(line=14, offs=28) -- 314(line=14, offs=29)
-*/
-ATSifnthen(ATSCKpat_int(arg0, ATSPMVint(1))) { ATSINSgoto(__atstmplab7) ; } ;
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 368(line=17, offs=8) -- 368(line=17, offs=8)
-*/
-ATSINSlab(__atstmplab6):
-/*
-emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
-*/
-/*
-ibranch-mbody:
-*/
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 372(line=17, offs=12) -- 373(line=17, offs=13)
-*/
-ATSINSmove(tmpret3, ATSPMVi0nt(1)) ;
-ATSbranch_end()
-
-ATSbranch_beg()
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 381(line=18, offs=8) -- 381(line=18, offs=8)
-*/
-ATSINSlab(__atstmplab7):
-/*
-emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
-*/
-/*
-ibranch-mbody:
-*/
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 396(line=18, offs=23) -- 401(line=18, offs=28)
-*/
-ATSINSmove(tmp5, atspre_g1int_sub_int(arg0, ATSPMVi0nt(2))) ;
-
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 390(line=18, offs=17) -- 402(line=18, offs=29)
-*/
-ATSINSmove(tmp4, dfact_3(tmp5)) ;
-
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 386(line=18, offs=13) -- 402(line=18, offs=29)
-*/
-ATSINSmove(tmpret3, atspre_g0int_mul_int(arg0, tmp4)) ;
-
-ATSbranch_end()
-
-/*
-** ibranchlst-end
-*/
-ATScaseof_end()
-
-ATSfunbody_end()
-ATSreturn(tmpret3) ;
-/*
-emit_funent_fnxbodylst:
-*/
-} /* end of [dfact_3] */
-
-/*
-/home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 441(line=21, offs=4) -- 797(line=33, offs=6)
-*/
-/*
-local: fact_0$0(level=0)
-global: fact_0$0(level=0), choose_4$0(level=0)
-local: 
-global: 
-*/
-ATSstatic()
-atstkind_t0ype(atstype_int)
-choose_4(atstkind_t0ype(atstype_int) arg0, atstkind_t0ype(atstype_int) arg1)
-{
-/* tmpvardeclst(beg) */
-ATStmpdec(tmpret6, atstkind_t0ype(atstype_int)) ;
-ATStmpdec(tmp13, atstkind_t0ype(atstype_int)) ;
-ATStmpdec(tmp14, atstkind_t0ype(atstype_int)) ;
-/* tmpvardeclst(end) */
-ATSfunbody_beg()
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 441(line=21, offs=4) -- 797(line=33, offs=6)
-*/
-ATSINSflab(__patsflab_choose_4):
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 513(line=22, offs=3) -- 797(line=33, offs=6)
-*/
-/*
-letpush(beg)
-*/
-/*
-letpush(end)
-*/
-
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 709(line=29, offs=5) -- 791(line=32, offs=42)
-*/
-ATScaseof_beg()
-/*
-** ibranchlst-beg
-*/
-ATSbranch_beg()
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 728(line=30, offs=9) -- 729(line=30, offs=10)
-*/
-ATSINSlab(__atstmplab13):
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 491(line=21, offs=54) -- 492(line=21, offs=55)
-*/
-ATSifnthen(ATSCKpat_int(arg1, ATSPMVint(0))) { ATSINSgoto(__atstmplab15) ; } ;
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 729(line=30, offs=10) -- 729(line=30, offs=10)
-*/
-ATSINSlab(__atstmplab14):
-/*
-emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
-*/
-/*
-ibranch-mbody:
-*/
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 733(line=30, offs=14) -- 734(line=30, offs=15)
-*/
-ATSINSmove(tmpret6, ATSPMVi0nt(1)) ;
-ATSbranch_end()
-
-ATSbranch_beg()
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 743(line=31, offs=9) -- 744(line=31, offs=10)
-*/
-ATSINSlab(__atstmplab15):
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 491(line=21, offs=54) -- 492(line=21, offs=55)
-*/
-ATSifnthen(ATSCKpat_int(arg1, ATSPMVint(1))) { ATSINSgoto(__atstmplab17) ; } ;
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 744(line=31, offs=10) -- 744(line=31, offs=10)
-*/
-ATSINSlab(__atstmplab16):
-/*
-emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
-*/
-/*
-ibranch-mbody:
-*/
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 748(line=31, offs=14) -- 749(line=31, offs=15)
-*/
-ATSINSmove(tmpret6, arg0) ;
-ATSbranch_end()
-
-ATSbranch_beg()
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 759(line=32, offs=10) -- 759(line=32, offs=10)
-*/
-ATSINSlab(__atstmplab17):
-/*
-emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
-*/
-/*
-ibranch-mbody:
-*/
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 764(line=32, offs=15) -- 780(line=32, offs=31)
-*/
-ATSINSmove(tmp13, numerator_loop_5(arg0, arg1)) ;
-
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 784(line=32, offs=35) -- 790(line=32, offs=41)
-*/
-ATSINSmove(tmp14, fact_0(arg1)) ;
-
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 764(line=32, offs=15) -- 790(line=32, offs=41)
-*/
-ATSINSmove(tmpret6, atspre_g0int_div_int(tmp13, tmp14)) ;
-
-ATSbranch_end()
-
-/*
-** ibranchlst-end
-*/
-ATScaseof_end()
-
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 513(line=22, offs=3) -- 797(line=33, offs=6)
-*/
-/*
-INSletpop()
-*/
-ATSfunbody_end()
-ATSreturn(tmpret6) ;
-} /* end of [choose_4] */
-
-/*
-/home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 525(line=23, offs=9) -- 699(line=27, offs=52)
-*/
-/*
-local: numerator_loop_5$0(level=1)
-global: numerator_loop_5$0(level=1)
-local: n$4734(1)(HSEapp(HSEcst(atstkind_t0ype); HSEs2exp(S2Eextkind(atstype_int))))
-global: n$4734(1)(HSEapp(HSEcst(atstkind_t0ype); HSEs2exp(S2Eextkind(atstype_int))))
-*/
-ATSstatic()
-atstkind_t0ype(atstype_int)
-numerator_loop_5(atstkind_t0ype(atstype_int) env0, atstkind_t0ype(atstype_int) arg0)
-{
-/* tmpvardeclst(beg) */
-ATStmpdec(tmpret7, atstkind_t0ype(atstype_int)) ;
-ATStmpdec(tmp8, atstkind_t0ype(atstype_int)) ;
-ATStmpdec(tmp9, atstkind_t0ype(atstype_int)) ;
-ATStmpdec(tmp10, atstkind_t0ype(atstype_int)) ;
-ATStmpdec(tmp11, atstkind_t0ype(atstype_int)) ;
-ATStmpdec(tmp12, atstkind_t0ype(atstype_int)) ;
-/* tmpvardeclst(end) */
-ATSfunbody_beg()
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 525(line=23, offs=9) -- 699(line=27, offs=52)
-*/
-ATSINSflab(__patsflab_numerator_loop_5):
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 593(line=24, offs=7) -- 699(line=27, offs=52)
-*/
-ATScaseof_beg()
-/*
-** ibranchlst-beg
-*/
-ATSbranch_beg()
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 614(line=25, offs=11) -- 615(line=25, offs=12)
-*/
-ATSINSlab(__atstmplab8):
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 567(line=23, offs=51) -- 568(line=23, offs=52)
-*/
-ATSifnthen(ATSCKpat_int(arg0, ATSPMVint(1))) { ATSINSgoto(__atstmplab10) ; } ;
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 615(line=25, offs=12) -- 615(line=25, offs=12)
-*/
-ATSINSlab(__atstmplab9):
-/*
-emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
-*/
-/*
-ibranch-mbody:
-*/
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 619(line=25, offs=16) -- 620(line=25, offs=17)
-*/
-ATSINSmove(tmpret7, env0) ;
-ATSbranch_end()
-
-ATSbranch_beg()
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 631(line=26, offs=11) -- 632(line=26, offs=12)
-*/
-ATSINSlab(__atstmplab10):
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 567(line=23, offs=51) -- 568(line=23, offs=52)
-*/
-ATSifnthen(ATSCKpat_int(arg0, ATSPMVint(2))) { ATSINSgoto(__atstmplab12) ; } ;
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 632(line=26, offs=12) -- 632(line=26, offs=12)
-*/
-ATSINSlab(__atstmplab11):
-/*
-emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
-*/
-/*
-ibranch-mbody:
-*/
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 637(line=26, offs=17) -- 642(line=26, offs=22)
-*/
-ATSINSmove(tmp8, atspre_g1int_sub_int(env0, ATSPMVi0nt(1))) ;
-
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 636(line=26, offs=16) -- 647(line=26, offs=27)
-*/
-ATSINSmove(tmpret7, atspre_g1int_mul_int(tmp8, env0)) ;
-
-ATSbranch_end()
-
-ATSbranch_beg()
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 659(line=27, offs=12) -- 659(line=27, offs=12)
-*/
-ATSINSlab(__atstmplab12):
-/*
-emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
-*/
-/*
-ibranch-mbody:
-*/
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 665(line=27, offs=18) -- 670(line=27, offs=23)
-*/
-ATSINSmove(tmp10, atspre_g1int_add_int(env0, ATSPMVi0nt(1))) ;
-
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 665(line=27, offs=18) -- 674(line=27, offs=27)
-*/
-ATSINSmove(tmp9, atspre_g1int_sub_int(tmp10, arg0)) ;
-
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 693(line=27, offs=46) -- 698(line=27, offs=51)
-*/
-ATSINSmove(tmp12, atspre_g1int_sub_int(arg0, ATSPMVi0nt(1))) ;
-
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 678(line=27, offs=31) -- 699(line=27, offs=52)
-*/
-ATSINSmove(tmp11, numerator_loop_5(env0, tmp12)) ;
-
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 664(line=27, offs=17) -- 699(line=27, offs=52)
-*/
-ATSINSmove(tmpret7, atspre_g0int_mul_int(tmp9, tmp11)) ;
-
-ATSbranch_end()
-
-/*
-** ibranchlst-end
-*/
-ATScaseof_end()
-
-ATSfunbody_end()
-ATSreturn(tmpret7) ;
-} /* end of [numerator_loop_5] */
-
-/*
-/home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 843(line=36, offs=5) -- 1341(line=55, offs=10)
-*/
-/*
-local: 
-global: is_prime_9$0(level=0)
-local: 
-global: 
-*/
-ATSstatic()
-atstkind_t0ype(atstype_bool)
-is_prime_9(atstkind_t0ype(atstype_int) arg0)
-{
-/* tmpvardeclst(beg) */
-ATStmpdec(tmpret15, atstkind_t0ype(atstype_bool)) ;
-ATStmpdec(tmpref16, atstkind_t0ype(atstype_int)) ;
-ATStmpdec(tmp17, atstkind_t0ype(atstype_float)) ;
-ATStmpdec(tmp18, atstkind_t0ype(atstype_float)) ;
-/* tmpvardeclst(end) */
-ATSfunbody_beg()
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 843(line=36, offs=5) -- 1341(line=55, offs=10)
-*/
-ATSINSflab(__patsflab_is_prime_9):
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 877(line=37, offs=3) -- 1341(line=55, offs=10)
-*/
-ATScaseof_beg()
-/*
-** ibranchlst-beg
-*/
-ATSbranch_beg()
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 894(line=38, offs=7) -- 895(line=38, offs=8)
-*/
-ATSINSlab(__atstmplab18):
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 852(line=36, offs=14) -- 853(line=36, offs=15)
-*/
-ATSifnthen(ATSCKpat_int(arg0, ATSPMVint(1))) { ATSINSgoto(__atstmplab20) ; } ;
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 895(line=38, offs=8) -- 895(line=38, offs=8)
-*/
-ATSINSlab(__atstmplab19):
-/*
-emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
-*/
-/*
-ibranch-mbody:
-*/
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 899(line=38, offs=12) -- 904(line=38, offs=17)
-*/
-ATSINSmove(tmpret15, ATSPMVbool_false()) ;
-ATSbranch_end()
-
-ATSbranch_beg()
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 912(line=39, offs=8) -- 912(line=39, offs=8)
-*/
-ATSINSlab(__atstmplab20):
-/*
-emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
-*/
-/*
-ibranch-mbody:
-*/
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 937(line=41, offs=9) -- 1331(line=54, offs=12)
-*/
-/*
-letpush(beg)
-*/
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 955(line=42, offs=15) -- 960(line=42, offs=20)
-*/
-/*
-ATSINStmpdec(tmpref16) ;
-*/
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 991(line=42, offs=51) -- 1014(line=42, offs=74)
-*/
-ATSINSmove(tmp18, atspre_g0int2float_int_float(arg0)) ;
-
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 980(line=42, offs=40) -- 1016(line=42, offs=76)
-*/
-ATSINSmove(tmp17, atslib_libats_libc_sqrt_float(tmp18)) ;
-
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 968(line=42, offs=28) -- 1017(line=42, offs=77)
-*/
-ATSINSmove(tmpref16, atspre_g0float2int_float_int(tmp17)) ;
-
-/*
-letpush(end)
-*/
-
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 1305(line=53, offs=11) -- 1319(line=53, offs=25)
-*/
-ATSINSmove(tmpret15, loop_11(arg0, ATSPMVi0nt(2), tmpref16)) ;
-
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 937(line=41, offs=9) -- 1331(line=54, offs=12)
-*/
-/*
-INSletpop()
-*/
-ATSbranch_end()
-
-/*
-** ibranchlst-end
-*/
-ATScaseof_end()
-
-ATSfunbody_end()
-ATSreturn(tmpret15) ;
-} /* end of [is_prime_9] */
-
-/*
-/home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 1043(line=44, offs=15) -- 1283(line=51, offs=19)
-*/
-/*
-local: loop_11$0(level=1)
-global: loop_11$0(level=1)
-local: k$4742(1)(HSEapp(HSEcst(atstkind_t0ype); HSEs2exp(S2Eextkind(atstype_int))))
-global: k$4742(1)(HSEapp(HSEcst(atstkind_t0ype); HSEs2exp(S2Eextkind(atstype_int))))
-*/
-ATSstatic()
-atstkind_t0ype(atstype_bool)
-loop_11(atstkind_t0ype(atstype_int) env0, atstkind_t0ype(atstype_int) arg0, atstkind_t0ype(atstype_int) arg1)
-{
-/* tmpvardeclst(beg) */
-ATStmpdec(apy0, atstkind_t0ype(atstype_int)) ;
-ATStmpdec(apy1, atstkind_t0ype(atstype_int)) ;
-ATStmpdec(tmpret19, atstkind_t0ype(atstype_bool)) ;
-ATStmpdec(tmp20, atstkind_t0ype(atstype_bool)) ;
-ATStmpdec(tmp25, atstkind_t0ype(atstype_bool)) ;
-ATStmpdec(tmp30, atstkind_t0ype(atstype_int)) ;
-ATStmpdec(tmp31, atstkind_t0ype(atstype_int)) ;
-/* tmpvardeclst(end) */
-ATSfunbody_beg()
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 1043(line=44, offs=15) -- 1283(line=51, offs=19)
-*/
-ATSINSflab(__patsflab_loop_11):
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 1114(line=45, offs=16) -- 1124(line=45, offs=26)
-*/
-ATSINSmove(tmp20, ATSLIB_056_prelude__lte_g0int_int__12__1(arg0, arg1)) ;
-
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 1111(line=45, offs=13) -- 1283(line=51, offs=19)
-*/
-ATSif(
-tmp20
-) ATSthen() {
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 1147(line=46, offs=18) -- 1154(line=46, offs=25)
-*/
-ATSINSmove(tmp30, atspre_g0int_mod_int(env0, arg0)) ;
-
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 1147(line=46, offs=18) -- 1158(line=46, offs=29)
-*/
-ATSINSmove(tmp25, ATSLIB_056_prelude__eq_g0int_int__16__1(tmp30, ATSPMVi0nt(0))) ;
-
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 1144(line=46, offs=15) -- 1247(line=49, offs=43)
-*/
-ATSif(
-tmp25
-) ATSthen() {
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 1180(line=47, offs=17) -- 1185(line=47, offs=22)
-*/
-ATSINSmove(tmpret19, ATSPMVbool_false()) ;
-} ATSelse() {
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 1221(line=49, offs=17) -- 1247(line=49, offs=43)
-*/
-ATSif(
-ATSPMVbool_true()
-) ATSthen() {
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 1221(line=49, offs=17) -- 1247(line=49, offs=43)
-*/
-ATSINSmove(tmp31, atspre_g1int_add_int(arg0, ATSPMVi0nt(1))) ;
-
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 1221(line=49, offs=17) -- 1247(line=49, offs=43)
-*/
-ATStailcal_beg()
-ATSINSmove_tlcal(apy0, tmp31) ;
-ATSINSmove_tlcal(apy1, arg1) ;
-ATSINSargmove_tlcal(arg0, apy0) ;
-ATSINSargmove_tlcal(arg1, apy1) ;
-ATSINSfgoto(__patsflab_loop_11) ;
-ATStailcal_end()
-
-} ATSelse() {
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 1221(line=49, offs=17) -- 1247(line=49, offs=43)
-*/
-ATSINSmove(tmpret19, ATSPMVbool_false()) ;
-} /* ATSendif */
-} /* ATSendif */
-} ATSelse() {
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 1279(line=51, offs=15) -- 1283(line=51, offs=19)
-*/
-ATSINSmove(tmpret19, ATSPMVbool_true()) ;
-} /* ATSendif */
-ATSfunbody_end()
-ATSreturn(tmpret19) ;
-} /* end of [loop_11] */
-
-#if(0)
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats: 12019(line=621, offs=3) -- 12059(line=621, offs=43)
-*/
-/*
-local: 
-global: lte_g0int_int$12$0(level=0)
-local: 
-global: 
-*/
-ATSextern()
-/*
-imparg = tk(4691)
-tmparg = S2Evar(tk(4691))
-tmpsub = None()
-*/
-atstkind_t0ype(atstype_bool)
-ATSLIB_056_prelude__lte_g0int_int__12(atstkind_t0ype(atstyvar_type(tk)) arg0, atstkind_t0ype(atstype_int) arg1)
-{
-/* tmpvardeclst(beg) */
-ATStmpdec(tmpret21, atstkind_t0ype(atstype_bool)) ;
-ATStmpdec(tmp22, atstkind_t0ype(atstyvar_type(tk))) ;
-/* tmpvardeclst(end) */
-ATSfunbody_beg()
-/*
-emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12003(line=620, offs=1) -- 12059(line=621, offs=43)
-*/
-ATSINSflab(__patsflab_lte_g0int_int):
-/*
-emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12046(line=621, offs=30) -- 12057(line=621, offs=41)
-*/
-ATSINSmove(tmp22, PMVtmpltcst(g0int2int<S2Eextkind(atstype_int), S2Evar(tk(4691))>)(arg1)) ;
-
-/*
-emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12028(line=621, offs=12) -- 12059(line=621, offs=43)
-*/
-ATSINSmove(tmpret21, PMVtmpltcst(g0int_lte<S2Evar(tk(4691))>)(arg0, tmp22)) ;
-
-ATSfunbody_end()
-ATSreturn(tmpret21) ;
-} /* end of [ATSLIB_056_prelude__lte_g0int_int__12] */
-#endif // end of [TEMPLATE]
-
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats: 12019(line=621, offs=3) -- 12059(line=621, offs=43)
-*/
-/*
-local: 
-global: lte_g0int_int$12$1(level=2)
-local: 
-global: 
-*/
-ATSstatic()
-/*
-imparg = tk(4691)
-tmparg = S2Evar(tk(4691))
-tmpsub = Some(tk(4691) -> S2Eextkind(atstype_int))
-*/
-atstkind_t0ype(atstype_bool)
-ATSLIB_056_prelude__lte_g0int_int__12__1(atstkind_t0ype(atstype_int) arg0, atstkind_t0ype(atstype_int) arg1)
-{
-/* tmpvardeclst(beg) */
-ATStmpdec(tmpret21__1, atstkind_t0ype(atstype_bool)) ;
-ATStmpdec(tmp22__1, atstkind_t0ype(atstype_int)) ;
-/* tmpvardeclst(end) */
-ATSfunbody_beg()
-/*
-emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12003(line=620, offs=1) -- 12059(line=621, offs=43)
-*/
-ATSINSflab(__patsflab_lte_g0int_int):
-/*
-emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12046(line=621, offs=30) -- 12057(line=621, offs=41)
-*/
-ATSINSmove(tmp22__1, atspre_g0int2int_int_int(arg1)) ;
-
-/*
-emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12028(line=621, offs=12) -- 12059(line=621, offs=43)
-*/
-ATSINSmove(tmpret21__1, atspre_g0int_lte_int(arg0, tmp22__1)) ;
-
-ATSfunbody_end()
-ATSreturn(tmpret21__1) ;
-} /* end of [ATSLIB_056_prelude__lte_g0int_int__12__1] */
-
-#if(0)
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats: 12259(line=635, offs=3) -- 12298(line=635, offs=42)
-*/
-/*
-local: 
-global: eq_g0int_int$16$0(level=0)
-local: 
-global: 
-*/
-ATSextern()
-/*
-imparg = tk(4694)
-tmparg = S2Evar(tk(4694))
-tmpsub = None()
-*/
-atstkind_t0ype(atstype_bool)
-ATSLIB_056_prelude__eq_g0int_int__16(atstkind_t0ype(atstyvar_type(tk)) arg0, atstkind_t0ype(atstype_int) arg1)
-{
-/* tmpvardeclst(beg) */
-ATStmpdec(tmpret26, atstkind_t0ype(atstype_bool)) ;
-ATStmpdec(tmp27, atstkind_t0ype(atstyvar_type(tk))) ;
-/* tmpvardeclst(end) */
-ATSfunbody_beg()
-/*
-emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12244(line=634, offs=1) -- 12298(line=635, offs=42)
-*/
-ATSINSflab(__patsflab_eq_g0int_int):
-/*
-emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12285(line=635, offs=29) -- 12296(line=635, offs=40)
-*/
-ATSINSmove(tmp27, PMVtmpltcst(g0int2int<S2Eextkind(atstype_int), S2Evar(tk(4694))>)(arg1)) ;
-
-/*
-emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12268(line=635, offs=12) -- 12298(line=635, offs=42)
-*/
-ATSINSmove(tmpret26, PMVtmpltcst(g0int_eq<S2Evar(tk(4694))>)(arg0, tmp27)) ;
-
-ATSfunbody_end()
-ATSreturn(tmpret26) ;
-} /* end of [ATSLIB_056_prelude__eq_g0int_int__16] */
-#endif // end of [TEMPLATE]
-
-/*
-/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats: 12259(line=635, offs=3) -- 12298(line=635, offs=42)
-*/
-/*
-local: 
-global: eq_g0int_int$16$1(level=2)
-local: 
-global: 
-*/
-ATSstatic()
-/*
-imparg = tk(4694)
-tmparg = S2Evar(tk(4694))
-tmpsub = Some(tk(4694) -> S2Eextkind(atstype_int))
-*/
-atstkind_t0ype(atstype_bool)
-ATSLIB_056_prelude__eq_g0int_int__16__1(atstkind_t0ype(atstype_int) arg0, atstkind_t0ype(atstype_int) arg1)
-{
-/* tmpvardeclst(beg) */
-ATStmpdec(tmpret26__1, atstkind_t0ype(atstype_bool)) ;
-ATStmpdec(tmp27__1, atstkind_t0ype(atstype_int)) ;
-/* tmpvardeclst(end) */
-ATSfunbody_beg()
-/*
-emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12244(line=634, offs=1) -- 12298(line=635, offs=42)
-*/
-ATSINSflab(__patsflab_eq_g0int_int):
-/*
-emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12285(line=635, offs=29) -- 12296(line=635, offs=40)
-*/
-ATSINSmove(tmp27__1, atspre_g0int2int_int_int(arg1)) ;
-
-/*
-emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12268(line=635, offs=12) -- 12298(line=635, offs=42)
-*/
-ATSINSmove(tmpret26__1, atspre_g0int_eq_int(arg0, tmp27__1)) ;
-
-ATSfunbody_end()
-ATSreturn(tmpret26__1) ;
-} /* end of [ATSLIB_056_prelude__eq_g0int_int__16__1] */
-
-/*
-/home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 1656(line=73, offs=22) -- 1679(line=74, offs=15)
-*/
-/*
-local: choose_4$0(level=0)
-global: fact_0$0(level=0), choose_4$0(level=0), choose_ats$20$0(level=0)
-local: 
-global: 
-*/
-ATSextern()
-atstkind_t0ype(atstype_int)
-choose_ats(atstkind_t0ype(atstype_int) arg0, atstkind_t0ype(atstype_int) arg1)
-{
-/* tmpvardeclst(beg) */
-ATStmpdec(tmpret32, atstkind_t0ype(atstype_int)) ;
-/* tmpvardeclst(end) */
-ATSfunbody_beg()
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 1645(line=73, offs=11) -- 1679(line=74, offs=15)
-*/
-ATSINSflab(__patsflab_choose_ats):
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 1667(line=74, offs=3) -- 1679(line=74, offs=15)
-*/
-ATSINSmove(tmpret32, choose_4(arg0, arg1)) ;
-
-ATSfunbody_end()
-ATSreturn(tmpret32) ;
-} /* end of [choose_ats] */
-
-/*
-/home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 1708(line=76, offs=28) -- 1723(line=77, offs=10)
-*/
-/*
-local: dfact_3$0(level=0)
-global: dfact_3$0(level=0), double_factorial$21$0(level=0)
-local: 
-global: 
-*/
-ATSextern()
-atstkind_t0ype(atstype_int)
-double_factorial(atstkind_t0ype(atstype_int) arg0)
-{
-/* tmpvardeclst(beg) */
-ATStmpdec(tmpret33, atstkind_t0ype(atstype_int)) ;
-/* tmpvardeclst(end) */
-ATSfunbody_beg()
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 1691(line=76, offs=11) -- 1724(line=77, offs=11)
-*/
-ATSINSflab(__patsflab_double_factorial):
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 1716(line=77, offs=3) -- 1723(line=77, offs=10)
-*/
-ATSINSmove(tmpret33, dfact_3(arg0)) ;
-
-ATSfunbody_end()
-ATSreturn(tmpret33) ;
-} /* end of [double_factorial] */
-
-/*
-/home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 1749(line=79, offs=24) -- 1767(line=80, offs=13)
-*/
-/*
-local: is_prime_9$0(level=0)
-global: is_prime_9$0(level=0), is_prime_ats$22$0(level=0)
-local: 
-global: 
-*/
-ATSextern()
-atstkind_t0ype(atstype_bool)
-is_prime_ats(atstkind_t0ype(atstype_int) arg0)
-{
-/* tmpvardeclst(beg) */
-ATStmpdec(tmpret34, atstkind_t0ype(atstype_bool)) ;
-/* tmpvardeclst(end) */
-ATSfunbody_beg()
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 1736(line=79, offs=11) -- 1768(line=80, offs=14)
-*/
-ATSINSflab(__patsflab_is_prime_ats):
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 1757(line=80, offs=3) -- 1767(line=80, offs=13)
-*/
-ATSINSmove(tmpret34, is_prime_9(arg0)) ;
-
-ATSfunbody_end()
-ATSreturn(tmpret34) ;
-} /* end of [is_prime_ats] */
-
-/*
-/home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 1794(line=82, offs=25) -- 1808(line=83, offs=9)
-*/
-/*
-local: fact_0$0(level=0)
-global: fact_0$0(level=0), factorial_ats$23$0(level=0)
-local: 
-global: 
-*/
-ATSextern()
-atstkind_t0ype(atstype_int)
-factorial_ats(atstkind_t0ype(atstype_int) arg0)
-{
-/* tmpvardeclst(beg) */
-ATStmpdec(tmpret35, atstkind_t0ype(atstype_int)) ;
-/* tmpvardeclst(end) */
-ATSfunbody_beg()
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 1780(line=82, offs=11) -- 1809(line=83, offs=10)
-*/
-ATSINSflab(__patsflab_factorial_ats):
-/*
-emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/fast-combinatorics.dats: 1802(line=83, offs=3) -- 1808(line=83, offs=9)
-*/
-ATSINSmove(tmpret35, fact_0(arg0)) ;
-
-ATSfunbody_end()
-ATSreturn(tmpret35) ;
-} /* end of [factorial_ats] */
-
-/*
-** for initialization(dynloading)
-*/
-ATSdynloadflag_minit(_057_home_057_vanessa_057_programming_057_haskell_057_current_057_fast_055_combinatorics_057_ats_055_src_057_fast_055_combinatorics_056_dats__dynloadflag) ;
-ATSextern()
-atsvoid_t0ype
-_057_home_057_vanessa_057_programming_057_haskell_057_current_057_fast_055_combinatorics_057_ats_055_src_057_fast_055_combinatorics_056_dats__dynload()
-{
-ATSfunbody_beg()
-ATSdynload(/*void*/)
-ATSdynloadflag_sta(
-_057_home_057_vanessa_057_programming_057_haskell_057_current_057_fast_055_combinatorics_057_ats_055_src_057_fast_055_combinatorics_056_dats__dynloadflag
-) ;
-ATSif(
-ATSCKiseqz(
-_057_home_057_vanessa_057_programming_057_haskell_057_current_057_fast_055_combinatorics_057_ats_055_src_057_fast_055_combinatorics_056_dats__dynloadflag
-)
-) ATSthen() {
-ATSdynloadset(_057_home_057_vanessa_057_programming_057_haskell_057_current_057_fast_055_combinatorics_057_ats_055_src_057_fast_055_combinatorics_056_dats__dynloadflag) ;
-/*
-dynexnlst-initize(beg)
-*/
-/*
-dynexnlst-initize(end)
-*/
-} /* ATSendif */
-ATSfunbody_end()
-ATSreturn_void(tmpret_void) ;
-} /* end of [*_dynload] */
-
-/* ****** ****** */
-
-/* end-of-compilation-unit */
diff --git a/cbits/numerics-ffi.c b/cbits/numerics-ffi.c
new file mode 100644
--- /dev/null
+++ b/cbits/numerics-ffi.c
@@ -0,0 +1,1546 @@
+/*
+**
+** The C code is generated by [ATS/Postiats-0-3-8]
+** The starting compilation time is: 2017-12-30: 23h:56m
+**
+*/
+
+/*
+** include runtime header files
+*/
+#ifndef _ATS_CCOMP_HEADER_NONE_
+#include "pats_ccomp_config.h"
+#include "pats_ccomp_basics.h"
+#include "pats_ccomp_typedefs.h"
+#include "pats_ccomp_instrset.h"
+#include "pats_ccomp_memalloc.h"
+#ifndef _ATS_CCOMP_EXCEPTION_NONE_
+#include "pats_ccomp_memalloca.h"
+#include "pats_ccomp_exception.h"
+#endif // end of [_ATS_CCOMP_EXCEPTION_NONE_]
+#endif /* _ATS_CCOMP_HEADER_NONE_ */
+
+
+/*
+** include prelude cats files
+*/
+#ifndef _ATS_CCOMP_PRELUDE_NONE_
+//
+#include "prelude/CATS/basics.cats"
+#include "prelude/CATS/integer.cats"
+#include "prelude/CATS/pointer.cats"
+#include "prelude/CATS/integer_long.cats"
+#include "prelude/CATS/integer_size.cats"
+#include "prelude/CATS/integer_short.cats"
+#include "prelude/CATS/bool.cats"
+#include "prelude/CATS/char.cats"
+#include "prelude/CATS/float.cats"
+#include "prelude/CATS/integer_ptr.cats"
+#include "prelude/CATS/integer_fixed.cats"
+#include "prelude/CATS/memory.cats"
+#include "prelude/CATS/string.cats"
+#include "prelude/CATS/strptr.cats"
+//
+#include "prelude/CATS/fprintf.cats"
+//
+#include "prelude/CATS/filebas.cats"
+//
+#include "prelude/CATS/list.cats"
+#include "prelude/CATS/option.cats"
+#include "prelude/CATS/array.cats"
+#include "prelude/CATS/arrayptr.cats"
+#include "prelude/CATS/arrayref.cats"
+#include "prelude/CATS/matrix.cats"
+#include "prelude/CATS/matrixptr.cats"
+//
+#endif /* _ATS_CCOMP_PRELUDE_NONE_ */
+/*
+** for user-supplied prelude
+*/
+#ifdef _ATS_CCOMP_PRELUDE_USER_
+//
+#include _ATS_CCOMP_PRELUDE_USER_
+//
+#endif /* _ATS_CCOMP_PRELUDE_USER_ */
+/*
+** for user2-supplied prelude
+*/
+#ifdef _ATS_CCOMP_PRELUDE_USER2_
+//
+#include _ATS_CCOMP_PRELUDE_USER2_
+//
+#endif /* _ATS_CCOMP_PRELUDE_USER2_ */
+
+/*
+staload-prologues(beg)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/basics.dats: 1636(line=50, offs=1) -- 1675(line=50, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats: 1596(line=49, offs=1) -- 1635(line=49, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/pointer.dats: 1533(line=44, offs=1) -- 1572(line=44, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer_long.dats: 1602(line=49, offs=1) -- 1641(line=49, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer_size.dats: 1597(line=49, offs=1) -- 1636(line=49, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer_short.dats: 1603(line=49, offs=1) -- 1642(line=49, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/char.dats: 1610(line=48, offs=1) -- 1649(line=48, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/float.dats: 1636(line=50, offs=1) -- 1675(line=50, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/string.dats: 1631(line=50, offs=1) -- 1670(line=50, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/strptr.dats: 1629(line=50, offs=1) -- 1668(line=50, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/strptr.dats: 1691(line=54, offs=1) -- 1738(line=54, offs=48)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats: 1596(line=49, offs=1) -- 1635(line=49, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer_ptr.dats: 1601(line=49, offs=1) -- 1640(line=49, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer_fixed.dats: 1603(line=49, offs=1) -- 1642(line=49, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/memory.dats: 1410(line=38, offs=1) -- 1449(line=39, offs=32)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/filebas.dats: 1613(line=49, offs=1) -- 1652(line=50, offs=32)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/filebas.dats: 1675(line=54, offs=1) -- 1721(line=55, offs=39)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats: 1596(line=49, offs=1) -- 1635(line=49, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/filebas.dats: 1744(line=59, offs=1) -- 1789(line=60, offs=38)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/libats/libc/SATS/stdio.sats: 1390(line=36, offs=1) -- 1437(line=39, offs=3)
+*/
+
+#include \
+"libats/libc/CATS/stdio.cats"
+/*
+/usr/local/lib/ats2-postiats-0.3.8/libats/libc/SATS/stdio.sats: 1950(line=69, offs=1) -- 1999(line=71, offs=34)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/libats/libc/SATS/sys/types.sats: 1390(line=36, offs=1) -- 1441(line=39, offs=3)
+*/
+
+#include \
+"libats/libc/CATS/sys/types.cats"
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/filebas.dats: 1871(line=66, offs=1) -- 1918(line=66, offs=48)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/libats/libc/SATS/sys/stat.sats: 1390(line=36, offs=1) -- 1440(line=39, offs=3)
+*/
+
+#include \
+"libats/libc/CATS/sys/stat.cats"
+/*
+/usr/local/lib/ats2-postiats-0.3.8/libats/libc/SATS/sys/stat.sats: 1756(line=58, offs=1) -- 1805(line=60, offs=34)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/libats/libc/SATS/sys/types.sats: 1390(line=36, offs=1) -- 1441(line=39, offs=3)
+*/
+
+#include \
+"libats/libc/CATS/sys/types.cats"
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/filebas.dats: 15552(line=879, offs=1) -- 15589(line=880, offs=30)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/libats/libc/SATS/stdio.sats: 1390(line=36, offs=1) -- 1437(line=39, offs=3)
+*/
+
+#include \
+"libats/libc/CATS/stdio.cats"
+/*
+/usr/local/lib/ats2-postiats-0.3.8/libats/libc/SATS/stdio.sats: 1950(line=69, offs=1) -- 1999(line=71, offs=34)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/libats/libc/SATS/sys/types.sats: 1390(line=36, offs=1) -- 1441(line=39, offs=3)
+*/
+
+#include \
+"libats/libc/CATS/sys/types.cats"
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/list.dats: 1529(line=44, offs=1) -- 1568(line=45, offs=32)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/list.dats: 1569(line=46, offs=1) -- 1615(line=47, offs=39)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/unsafe.dats: 1532(line=44, offs=1) -- 1566(line=44, offs=35)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/list_vt.dats: 1538(line=44, offs=1) -- 1577(line=45, offs=32)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/list_vt.dats: 1578(line=46, offs=1) -- 1624(line=47, offs=39)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/unsafe.dats: 1532(line=44, offs=1) -- 1566(line=44, offs=35)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/SHARE/list_vt_mergesort.dats: 1546(line=44, offs=1) -- 1585(line=44, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/SHARE/list_vt_quicksort.dats: 1546(line=44, offs=1) -- 1585(line=44, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/array.dats: 1534(line=44, offs=1) -- 1573(line=44, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/array.dats: 1574(line=45, offs=1) -- 1616(line=45, offs=43)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/SHARE/array_bsearch.dats: 1531(line=44, offs=1) -- 1570(line=44, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/SHARE/array_quicksort.dats: 1531(line=44, offs=1) -- 1570(line=44, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/arrayptr.dats: 1532(line=44, offs=1) -- 1571(line=44, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/arrayref.dats: 1532(line=44, offs=1) -- 1571(line=44, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/matrix.dats: 1535(line=44, offs=1) -- 1574(line=44, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/matrixptr.dats: 1538(line=44, offs=1) -- 1577(line=44, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/matrixref.dats: 1538(line=44, offs=1) -- 1577(line=44, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/stream.dats: 1523(line=44, offs=1) -- 1562(line=44, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/stream_vt.dats: 1523(line=44, offs=1) -- 1562(line=44, offs=40)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/tostring.dats: 1528(line=44, offs=1) -- 1567(line=45, offs=32)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/unsafe.dats: 1532(line=44, offs=1) -- 1566(line=44, offs=35)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/checkast.dats: 1531(line=44, offs=1) -- 1570(line=45, offs=32)
+*/
+/*
+/usr/local/lib/ats2-postiats-0.3.8/libats/libc/SATS/math.sats: 1380(line=35, offs=1) -- 1426(line=38, offs=3)
+*/
+
+#include \
+"libats/libc/CATS/math.cats"
+/*
+staload-prologues(end)
+*/
+/*
+typedefs-for-tyrecs-and-tysums(beg)
+*/
+/*
+typedefs-for-tyrecs-and-tysums(end)
+*/
+/*
+dynconlst-declaration(beg)
+*/
+/*
+dynconlst-declaration(end)
+*/
+/*
+dyncstlst-declaration(beg)
+*/
+ATSdyncst_mac(atspre_g1int2int_int_int)
+ATSdyncst_mac(atspre_g1int_gt_int)
+ATSdyncst_mac(atspre_g1int_half_int)
+ATSdyncst_mac(atspre_g0int_mod_int)
+ATSdyncst_mac(atspre_g0int2int_int_int)
+ATSdyncst_mac(atspre_g0int_eq_int)
+ATSdyncst_mac(atspre_g0int_mul_int)
+ATSdyncst_mac(atspre_g0float2int_float_int)
+ATSdyncst_mac(atslib_libats_libc_sqrt_float)
+ATSdyncst_mac(atspre_g0int2float_int_float)
+ATSdyncst_mac(atspre_g1int_add_int)
+ATSdyncst_mac(atspre_g0int_sub_int)
+ATSdyncst_mac(atspre_g1int_lt_int)
+ATSdyncst_mac(atspre_g1int_eq_int)
+/*
+dyncstlst-declaration(end)
+*/
+/*
+dynvalist-implementation(beg)
+*/
+/*
+dynvalist-implementation(end)
+*/
+/*
+exnconlst-declaration(beg)
+*/
+#ifndef _ATS_CCOMP_EXCEPTION_NONE_
+ATSextern()
+atsvoid_t0ype
+the_atsexncon_initize
+(
+  atstype_exnconptr d2c, atstype_string exnmsg
+) ;
+#endif // end of [_ATS_CCOMP_EXCEPTION_NONE_]
+/*
+exnconlst-declaration(end)
+*/
+/*
+extypelst-declaration(beg)
+*/
+/*
+extypelst-declaration(end)
+*/
+/*
+assumelst-declaration(beg)
+*/
+#ifndef _ATS_CCOMP_ASSUME_CHECK_NONE_
+#endif // #ifndef(_ATS_CCOMP_ASSUME_CHECK_NONE_)
+/*
+assumelst-declaration(end)
+*/
+ATSstatic()
+atstkind_t0ype(atstype_int)
+exp_0(atstkind_t0ype(atstype_int), atstkind_t0ype(atstype_int)) ;
+
+#if(0)
+#if(0)
+ATSextern()
+atstkind_t0ype(atstype_bool)
+ATSLIB_056_prelude__gt_g1int_int__1(atstkind_t0ype(atstyvar_type(tk)), atstkind_t0ype(atstype_int)) ;
+#endif // end of [QUALIFIED]
+#endif // end of [TEMPLATE]
+
+ATSstatic()
+atstkind_t0ype(atstype_bool)
+ATSLIB_056_prelude__gt_g1int_int__1__1(atstkind_t0ype(atstype_int), atstkind_t0ype(atstype_int)) ;
+
+#if(0)
+#if(0)
+ATSextern()
+atstkind_t0ype(atstype_bool)
+ATSLIB_056_prelude__eq_g0int_int__7(atstkind_t0ype(atstyvar_type(tk)), atstkind_t0ype(atstype_int)) ;
+#endif // end of [QUALIFIED]
+#endif // end of [TEMPLATE]
+
+ATSstatic()
+atstkind_t0ype(atstype_bool)
+ATSLIB_056_prelude__eq_g0int_int__7__1(atstkind_t0ype(atstype_int), atstkind_t0ype(atstype_int)) ;
+
+ATSstatic()
+atstkind_t0ype(atstype_int)
+sqrt_bad_12(atstkind_t0ype(atstype_int)) ;
+
+ATSstatic()
+atstkind_t0ype(atstype_int)
+__patsfun_14(atstkind_t0ype(atstype_int)) ;
+
+ATSstatic()
+atstkind_t0ype(atstype_bool)
+is_prime_17(atstkind_t0ype(atstype_int)) ;
+
+ATSstatic()
+atstkind_t0ype(atstype_bool)
+loop_18(atstkind_t0ype(atstype_int), atstkind_t0ype(atstype_int), atstkind_t0ype(atstype_int)) ;
+
+#if(0)
+#if(0)
+ATSextern()
+atstkind_t0ype(atstype_bool)
+ATSLIB_056_prelude__lt_g1int_int__19(atstkind_t0ype(atstyvar_type(tk)), atstkind_t0ype(atstype_int)) ;
+#endif // end of [QUALIFIED]
+#endif // end of [TEMPLATE]
+
+ATSstatic()
+atstkind_t0ype(atstype_bool)
+ATSLIB_056_prelude__lt_g1int_int__19__1(atstkind_t0ype(atstype_int), atstkind_t0ype(atstype_int)) ;
+
+ATSstatic()
+atstkind_t0ype(atstype_bool)
+ATSLIB_056_prelude__eq_g0int_int__7__2(atstkind_t0ype(atstype_int), atstkind_t0ype(atstype_int)) ;
+
+#if(0)
+#if(0)
+ATSextern()
+atstkind_t0ype(atstype_bool)
+ATSLIB_056_prelude__eq_g1int_int__23(atstkind_t0ype(atstyvar_type(tk)), atstkind_t0ype(atstype_int)) ;
+#endif // end of [QUALIFIED]
+#endif // end of [TEMPLATE]
+
+ATSstatic()
+atstkind_t0ype(atstype_bool)
+ATSLIB_056_prelude__eq_g1int_int__23__1(atstkind_t0ype(atstype_int), atstkind_t0ype(atstype_int)) ;
+
+ATSstatic()
+atstkind_t0ype(atstype_bool)
+ATSLIB_056_prelude__eq_g0int_int__7__3(atstkind_t0ype(atstype_int), atstkind_t0ype(atstype_int)) ;
+
+#if(0)
+ATSextern()
+atstkind_t0ype(atstype_bool)
+is_prime_ats(atstkind_t0ype(atstype_int)) ;
+#endif // end of [QUALIFIED]
+
+#if(0)
+ATSextern()
+atstkind_t0ype(atstype_int)
+exp_ats(atstkind_t0ype(atstype_int), atstkind_t0ype(atstype_int)) ;
+#endif // end of [QUALIFIED]
+
+ATSclosurerize_beg(__patsfun_14, (), (atstkind_t0ype(atstype_int)), atstkind_t0ype(atstype_int))
+typedef
+ATSstruct {
+atstype_funptr cfun ;
+} __patsfun_14__closure_t0ype ;
+ATSstatic()
+atstkind_t0ype(atstype_int)
+__patsfun_14__cfun
+(
+__patsfun_14__closure_t0ype *p_cenv, atstkind_t0ype(atstype_int) arg0
+)
+{
+ATSFCreturn(__patsfun_14(arg0)) ;
+} /* end of [cfun] */
+ATSstatic()
+atstype_cloptr
+__patsfun_14__closureinit
+(
+__patsfun_14__closure_t0ype *p_cenv
+)
+{
+p_cenv->cfun = __patsfun_14__cfun ;
+return p_cenv ;
+} /* end of [closureinit] */
+ATSclosurerize_end()
+/*
+/home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 108(line=7, offs=5) -- 467(line=24, offs=10)
+*/
+/*
+local: exp_0$0(level=0)
+global: exp_0$0(level=0)
+local: 
+global: 
+*/
+ATSstatic()
+atstkind_t0ype(atstype_int)
+exp_0(atstkind_t0ype(atstype_int) arg0, atstkind_t0ype(atstype_int) arg1)
+{
+/* tmpvardeclst(beg) */
+ATStmpdec(apy0, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(apy1, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmpret0, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmp1, atstkind_t0ype(atstype_bool)) ;
+ATStmpdec(tmp6, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmp7, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmp8, atstkind_t0ype(atstype_bool)) ;
+ATStmpdec(tmp13, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmp14, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmp15, atstkind_t0ype(atstype_int)) ;
+/* tmpvardeclst(end) */
+ATSfunbody_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 108(line=7, offs=5) -- 467(line=24, offs=10)
+*/
+ATSINSflab(__patsflab_exp_0):
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 160(line=8, offs=3) -- 467(line=24, offs=10)
+*/
+ATScaseof_beg()
+/*
+** ibranchlst-beg
+*/
+ATSbranch_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 177(line=9, offs=7) -- 178(line=9, offs=8)
+*/
+ATSINSlab(__atstmplab0):
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 129(line=7, offs=26) -- 130(line=7, offs=27)
+*/
+ATSifnthen(ATSCKpat_int(arg0, ATSPMVint(0))) { ATSINSgoto(__atstmplab2) ; } ;
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 178(line=9, offs=8) -- 178(line=9, offs=8)
+*/
+ATSINSlab(__atstmplab1):
+/*
+emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
+*/
+/*
+ibranch-mbody:
+*/
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 182(line=9, offs=12) -- 183(line=9, offs=13)
+*/
+ATSINSmove(tmpret0, ATSPMVi0nt(0)) ;
+ATSbranch_end()
+
+ATSbranch_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 191(line=10, offs=8) -- 191(line=10, offs=8)
+*/
+ATSINSlab(__atstmplab2):
+/*
+emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
+*/
+/*
+ibranch-mbody:
+*/
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 219(line=12, offs=12) -- 224(line=12, offs=17)
+*/
+ATSINSmove(tmp1, ATSLIB_056_prelude__gt_g1int_int__1__1(arg1, ATSPMVi0nt(0))) ;
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 216(line=12, offs=9) -- 457(line=23, offs=12)
+*/
+ATSif(
+tmp1
+) ATSthen() {
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 240(line=13, offs=11) -- 432(line=21, offs=14)
+*/
+/*
+letpush(beg)
+*/
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 265(line=14, offs=22) -- 271(line=14, offs=28)
+*/
+ATSINSmove(tmp6, atspre_g1int_half_int(arg1)) ;
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 294(line=15, offs=22) -- 299(line=15, offs=27)
+*/
+ATSINSmove(tmp7, atspre_g0int_mod_int(arg1, ATSPMVi0nt(2))) ;
+
+/*
+letpush(end)
+*/
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 328(line=17, offs=16) -- 334(line=17, offs=22)
+*/
+ATSINSmove(tmp8, ATSLIB_056_prelude__eq_g0int_int__7__1(tmp7, ATSPMVi0nt(0))) ;
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 325(line=17, offs=13) -- 418(line=20, offs=33)
+*/
+ATSif(
+tmp8
+) ATSthen() {
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 358(line=18, offs=19) -- 363(line=18, offs=24)
+*/
+ATSINSmove(tmp13, atspre_g0int_mul_int(arg0, arg0)) ;
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 354(line=18, offs=15) -- 368(line=18, offs=29)
+*/
+ATStailcal_beg()
+ATSINSmove_tlcal(apy0, tmp13) ;
+ATSINSmove_tlcal(apy1, tmp6) ;
+ATSINSargmove_tlcal(arg0, apy0) ;
+ATSINSargmove_tlcal(arg1, apy1) ;
+ATSINSfgoto(__patsflab_exp_0) ;
+ATStailcal_end()
+
+} ATSelse() {
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 408(line=20, offs=23) -- 413(line=20, offs=28)
+*/
+ATSINSmove(tmp15, atspre_g0int_mul_int(arg0, arg0)) ;
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 404(line=20, offs=19) -- 418(line=20, offs=33)
+*/
+ATSINSmove(tmp14, exp_0(tmp15, tmp6)) ;
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 400(line=20, offs=15) -- 418(line=20, offs=33)
+*/
+ATSINSmove(tmpret0, atspre_g0int_mul_int(arg0, tmp14)) ;
+
+} /* ATSendif */
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 240(line=13, offs=11) -- 432(line=21, offs=14)
+*/
+/*
+INSletpop()
+*/
+} ATSelse() {
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 456(line=23, offs=11) -- 457(line=23, offs=12)
+*/
+ATSINSmove(tmpret0, ATSPMVi0nt(1)) ;
+} /* ATSendif */
+ATSbranch_end()
+
+/*
+** ibranchlst-end
+*/
+ATScaseof_end()
+
+ATSfunbody_end()
+ATSreturn(tmpret0) ;
+} /* end of [exp_0] */
+
+#if(0)
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats: 12679(line=659, offs=3) -- 12718(line=659, offs=42)
+*/
+/*
+local: 
+global: gt_g1int_int$1$0(level=0)
+local: 
+global: 
+*/
+ATSextern()
+/*
+imparg = tk(4703)
+tmparg = S2Evar(tk(4703))
+tmpsub = None()
+*/
+atstkind_t0ype(atstype_bool)
+ATSLIB_056_prelude__gt_g1int_int__1(atstkind_t0ype(atstyvar_type(tk)) arg0, atstkind_t0ype(atstype_int) arg1)
+{
+/* tmpvardeclst(beg) */
+ATStmpdec(tmpret2, atstkind_t0ype(atstype_bool)) ;
+ATStmpdec(tmp3, atstkind_t0ype(atstyvar_type(tk))) ;
+/* tmpvardeclst(end) */
+ATSfunbody_beg()
+/*
+emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12664(line=658, offs=1) -- 12718(line=659, offs=42)
+*/
+ATSINSflab(__patsflab_gt_g1int_int):
+/*
+emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12705(line=659, offs=29) -- 12716(line=659, offs=40)
+*/
+ATSINSmove(tmp3, PMVtmpltcst(g1int2int<S2Eextkind(atstype_int), S2Evar(tk(4703))>)(arg1)) ;
+
+/*
+emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12688(line=659, offs=12) -- 12718(line=659, offs=42)
+*/
+ATSINSmove(tmpret2, PMVtmpltcst(g1int_gt<S2Evar(tk(4703))>)(arg0, tmp3)) ;
+
+ATSfunbody_end()
+ATSreturn(tmpret2) ;
+} /* end of [ATSLIB_056_prelude__gt_g1int_int__1] */
+#endif // end of [TEMPLATE]
+
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats: 12679(line=659, offs=3) -- 12718(line=659, offs=42)
+*/
+/*
+local: 
+global: gt_g1int_int$1$1(level=1)
+local: 
+global: 
+*/
+ATSstatic()
+/*
+imparg = tk(4703)
+tmparg = S2Evar(tk(4703))
+tmpsub = Some(tk(4703) -> S2Eextkind(atstype_int))
+*/
+atstkind_t0ype(atstype_bool)
+ATSLIB_056_prelude__gt_g1int_int__1__1(atstkind_t0ype(atstype_int) arg0, atstkind_t0ype(atstype_int) arg1)
+{
+/* tmpvardeclst(beg) */
+ATStmpdec(tmpret2__1, atstkind_t0ype(atstype_bool)) ;
+ATStmpdec(tmp3__1, atstkind_t0ype(atstype_int)) ;
+/* tmpvardeclst(end) */
+ATSfunbody_beg()
+/*
+emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12664(line=658, offs=1) -- 12718(line=659, offs=42)
+*/
+ATSINSflab(__patsflab_gt_g1int_int):
+/*
+emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12705(line=659, offs=29) -- 12716(line=659, offs=40)
+*/
+ATSINSmove(tmp3__1, atspre_g1int2int_int_int(arg1)) ;
+
+/*
+emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12688(line=659, offs=12) -- 12718(line=659, offs=42)
+*/
+ATSINSmove(tmpret2__1, atspre_g1int_gt_int(arg0, tmp3__1)) ;
+
+ATSfunbody_end()
+ATSreturn(tmpret2__1) ;
+} /* end of [ATSLIB_056_prelude__gt_g1int_int__1__1] */
+
+#if(0)
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats: 12259(line=635, offs=3) -- 12298(line=635, offs=42)
+*/
+/*
+local: 
+global: eq_g0int_int$7$0(level=0)
+local: 
+global: 
+*/
+ATSextern()
+/*
+imparg = tk(4694)
+tmparg = S2Evar(tk(4694))
+tmpsub = None()
+*/
+atstkind_t0ype(atstype_bool)
+ATSLIB_056_prelude__eq_g0int_int__7(atstkind_t0ype(atstyvar_type(tk)) arg0, atstkind_t0ype(atstype_int) arg1)
+{
+/* tmpvardeclst(beg) */
+ATStmpdec(tmpret9, atstkind_t0ype(atstype_bool)) ;
+ATStmpdec(tmp10, atstkind_t0ype(atstyvar_type(tk))) ;
+/* tmpvardeclst(end) */
+ATSfunbody_beg()
+/*
+emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12244(line=634, offs=1) -- 12298(line=635, offs=42)
+*/
+ATSINSflab(__patsflab_eq_g0int_int):
+/*
+emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12285(line=635, offs=29) -- 12296(line=635, offs=40)
+*/
+ATSINSmove(tmp10, PMVtmpltcst(g0int2int<S2Eextkind(atstype_int), S2Evar(tk(4694))>)(arg1)) ;
+
+/*
+emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12268(line=635, offs=12) -- 12298(line=635, offs=42)
+*/
+ATSINSmove(tmpret9, PMVtmpltcst(g0int_eq<S2Evar(tk(4694))>)(arg0, tmp10)) ;
+
+ATSfunbody_end()
+ATSreturn(tmpret9) ;
+} /* end of [ATSLIB_056_prelude__eq_g0int_int__7] */
+#endif // end of [TEMPLATE]
+
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats: 12259(line=635, offs=3) -- 12298(line=635, offs=42)
+*/
+/*
+local: 
+global: eq_g0int_int$7$1(level=1)
+local: 
+global: 
+*/
+ATSstatic()
+/*
+imparg = tk(4694)
+tmparg = S2Evar(tk(4694))
+tmpsub = Some(tk(4694) -> S2Eextkind(atstype_int))
+*/
+atstkind_t0ype(atstype_bool)
+ATSLIB_056_prelude__eq_g0int_int__7__1(atstkind_t0ype(atstype_int) arg0, atstkind_t0ype(atstype_int) arg1)
+{
+/* tmpvardeclst(beg) */
+ATStmpdec(tmpret9__1, atstkind_t0ype(atstype_bool)) ;
+ATStmpdec(tmp10__1, atstkind_t0ype(atstype_int)) ;
+/* tmpvardeclst(end) */
+ATSfunbody_beg()
+/*
+emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12244(line=634, offs=1) -- 12298(line=635, offs=42)
+*/
+ATSINSflab(__patsflab_eq_g0int_int):
+/*
+emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12285(line=635, offs=29) -- 12296(line=635, offs=40)
+*/
+ATSINSmove(tmp10__1, atspre_g0int2int_int_int(arg1)) ;
+
+/*
+emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12268(line=635, offs=12) -- 12298(line=635, offs=42)
+*/
+ATSINSmove(tmpret9__1, atspre_g0int_eq_int(arg0, tmp10__1)) ;
+
+ATSfunbody_end()
+ATSreturn(tmpret9__1) ;
+} /* end of [ATSLIB_056_prelude__eq_g0int_int__7__1] */
+
+/*
+/home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 473(line=26, offs=5) -- 778(line=35, offs=6)
+*/
+/*
+local: 
+global: sqrt_bad_12$0(level=0)
+local: 
+global: 
+*/
+ATSstatic()
+atstkind_t0ype(atstype_int)
+sqrt_bad_12(atstkind_t0ype(atstype_int) arg0)
+{
+/* tmpvardeclst(beg) */
+ATStmpdec(tmpret16, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmpref17, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmp18, atstkind_t0ype(atstype_float)) ;
+ATStmpdec(tmp19, atstkind_t0ype(atstype_float)) ;
+ATStmpdec(tmpref20, atstyclo_type(__patsfun_14)) ;
+ATStmpdec(tmpref24, atstkind_t0ype(atstype_int)) ;
+/* tmpvardeclst(end) */
+ATSfunbody_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 473(line=26, offs=5) -- 778(line=35, offs=6)
+*/
+ATSINSflab(__patsflab_sqrt_bad_12):
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 521(line=27, offs=3) -- 778(line=35, offs=6)
+*/
+/*
+letpush(beg)
+*/
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 533(line=28, offs=9) -- 542(line=28, offs=18)
+*/
+/*
+ATSINStmpdec(tmpref17) ;
+*/
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 573(line=28, offs=49) -- 596(line=28, offs=72)
+*/
+ATSINSmove(tmp19, atspre_g0int2float_int_float(arg0)) ;
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 562(line=28, offs=38) -- 598(line=28, offs=74)
+*/
+ATSINSmove(tmp18, atslib_libats_libc_sqrt_float(tmp19)) ;
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 550(line=28, offs=26) -- 599(line=28, offs=75)
+*/
+ATSINSmove(tmpref17, atspre_g0float2int_float_int(tmp18)) ;
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 608(line=29, offs=9) -- 611(line=29, offs=12)
+*/
+/*
+ATSINStmpdec(tmpref20) ;
+*/
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 614(line=29, offs=15) -- 706(line=31, offs=26)
+*/
+ATSINSclosure_initize(__patsfun_14, ((__patsfun_14__closure_t0ype*)(&tmpref20))) ;
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 715(line=32, offs=9) -- 720(line=32, offs=14)
+*/
+/*
+ATSINStmpdec(tmpref24) ;
+*/
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 743(line=32, offs=37) -- 756(line=32, offs=50)
+*/
+ATSINSmove(tmpref24, ATSfunclo_clo(ATSPMVrefarg1(ATSPMVptrof(tmpref20)), (atstype_cloptr, atstkind_t0ype(atstype_int)), atstkind_t0ype(atstype_int))(ATSPMVrefarg1(ATSPMVptrof(tmpref20)), tmpref17)) ;
+
+/*
+letpush(end)
+*/
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 767(line=34, offs=5) -- 772(line=34, offs=10)
+*/
+ATSINSmove(tmpret16, tmpref24) ;
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 521(line=27, offs=3) -- 778(line=35, offs=6)
+*/
+/*
+INSletpop()
+*/
+ATSfunbody_end()
+ATSreturn(tmpret16) ;
+} /* end of [sqrt_bad_12] */
+
+/*
+/home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 614(line=29, offs=15) -- 706(line=31, offs=26)
+*/
+/*
+local: __patsfun_14$0(level=1)
+global: __patsfun_14$0(level=1)
+local: 
+global: 
+*/
+ATSstatic()
+atstkind_t0ype(atstype_int)
+__patsfun_14(atstkind_t0ype(atstype_int) arg0)
+{
+/* tmpvardeclst(beg) */
+ATStmpdec(tmpret21, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmp22, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmp23, atstkind_t0ype(atstype_int)) ;
+/* tmpvardeclst(end) */
+ATSfunbody_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 614(line=29, offs=15) -- 706(line=31, offs=26)
+*/
+ATSINSflab(__patsflab___patsfun_14):
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 655(line=29, offs=56) -- 706(line=31, offs=26)
+*/
+ATScaseof_beg()
+/*
+** ibranchlst-beg
+*/
+ATSbranch_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 674(line=30, offs=9) -- 675(line=30, offs=10)
+*/
+ATSINSlab(__atstmplab3):
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 622(line=29, offs=23) -- 623(line=29, offs=24)
+*/
+ATSifnthen(ATSCKpat_int(arg0, ATSPMVint(0))) { ATSINSgoto(__atstmplab5) ; } ;
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 675(line=30, offs=10) -- 675(line=30, offs=10)
+*/
+ATSINSlab(__atstmplab4):
+/*
+emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
+*/
+/*
+ibranch-mbody:
+*/
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 679(line=30, offs=14) -- 680(line=30, offs=15)
+*/
+ATSINSmove(tmpret21, ATSPMVi0nt(0)) ;
+ATSbranch_end()
+
+ATSbranch_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 690(line=31, offs=10) -- 690(line=31, offs=10)
+*/
+ATSINSlab(__atstmplab5):
+/*
+emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
+*/
+/*
+ibranch-mbody:
+*/
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 700(line=31, offs=20) -- 705(line=31, offs=25)
+*/
+ATSINSmove(tmp23, atspre_g0int_sub_int(arg0, ATSPMVi0nt(1))) ;
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 698(line=31, offs=18) -- 706(line=31, offs=26)
+*/
+ATSINSmove(tmp22, __patsfun_14(tmp23)) ;
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 694(line=31, offs=14) -- 706(line=31, offs=26)
+*/
+ATSINSmove(tmpret21, atspre_g1int_add_int(ATSPMVi0nt(1), tmp22)) ;
+
+ATSbranch_end()
+
+/*
+** ibranchlst-end
+*/
+ATScaseof_end()
+
+ATSfunbody_end()
+ATSreturn(tmpret21) ;
+} /* end of [__patsfun_14] */
+
+/*
+/home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 784(line=37, offs=5) -- 1375(line=60, offs=10)
+*/
+/*
+local: sqrt_bad_12$0(level=0)
+global: sqrt_bad_12$0(level=0), is_prime_17$0(level=0)
+local: 
+global: 
+*/
+ATSstatic()
+atstkind_t0ype(atstype_bool)
+is_prime_17(atstkind_t0ype(atstype_int) arg0)
+{
+/* tmpvardeclst(beg) */
+ATStmpdec(tmpret25, atstkind_t0ype(atstype_bool)) ;
+ATStmpdec(tmp46, atstkind_t0ype(atstype_int)) ;
+/* tmpvardeclst(end) */
+ATSfunbody_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 784(line=37, offs=5) -- 1375(line=60, offs=10)
+*/
+ATSINSflab(__patsflab_is_prime_17):
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 818(line=38, offs=3) -- 1375(line=60, offs=10)
+*/
+ATScaseof_beg()
+/*
+** ibranchlst-beg
+*/
+ATSbranch_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 835(line=39, offs=7) -- 836(line=39, offs=8)
+*/
+ATSINSlab(__atstmplab6):
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 793(line=37, offs=14) -- 794(line=37, offs=15)
+*/
+ATSifnthen(ATSCKpat_int(arg0, ATSPMVint(1))) { ATSINSgoto(__atstmplab8) ; } ;
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 836(line=39, offs=8) -- 836(line=39, offs=8)
+*/
+ATSINSlab(__atstmplab7):
+/*
+emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
+*/
+/*
+ibranch-mbody:
+*/
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 840(line=39, offs=12) -- 845(line=39, offs=17)
+*/
+ATSINSmove(tmpret25, ATSPMVbool_false()) ;
+ATSbranch_end()
+
+ATSbranch_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 853(line=40, offs=8) -- 853(line=40, offs=8)
+*/
+ATSINSlab(__atstmplab8):
+/*
+emit_instr: loc0 = : 0(line=0, offs=0) -- 0(line=0, offs=0)
+*/
+/*
+ibranch-mbody:
+*/
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 878(line=42, offs=9) -- 1365(line=59, offs=12)
+*/
+/*
+letpush(beg)
+*/
+/*
+letpush(end)
+*/
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 1341(line=58, offs=19) -- 1351(line=58, offs=29)
+*/
+ATSINSmove(tmp46, sqrt_bad_12(arg0)) ;
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 1333(line=58, offs=11) -- 1353(line=58, offs=31)
+*/
+ATSINSmove(tmpret25, loop_18(arg0, ATSPMVi0nt(2), tmp46)) ;
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 878(line=42, offs=9) -- 1365(line=59, offs=12)
+*/
+/*
+INSletpop()
+*/
+ATSbranch_end()
+
+/*
+** ibranchlst-end
+*/
+ATScaseof_end()
+
+ATSfunbody_end()
+ATSreturn(tmpret25) ;
+} /* end of [is_prime_17] */
+
+/*
+/home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 896(line=43, offs=15) -- 1311(line=56, offs=21)
+*/
+/*
+local: loop_18$0(level=1)
+global: loop_18$0(level=1)
+local: k$4743(1)(HSEapp(HSEcst(atstkind_t0ype); HSEs2exp(S2Eextkind(atstype_int))))
+global: k$4743(1)(HSEapp(HSEcst(atstkind_t0ype); HSEs2exp(S2Eextkind(atstype_int))))
+*/
+ATSstatic()
+atstkind_t0ype(atstype_bool)
+loop_18(atstkind_t0ype(atstype_int) env0, atstkind_t0ype(atstype_int) arg0, atstkind_t0ype(atstype_int) arg1)
+{
+/* tmpvardeclst(beg) */
+ATStmpdec(apy0, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(apy1, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmpret26, atstkind_t0ype(atstype_bool)) ;
+ATStmpdec(tmp27, atstkind_t0ype(atstype_bool)) ;
+ATStmpdec(tmp32, atstkind_t0ype(atstype_bool)) ;
+ATStmpdec(tmp35, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmp36, atstkind_t0ype(atstype_int)) ;
+ATStmpdec(tmp37, atstkind_t0ype(atstype_bool)) ;
+ATStmpdec(tmp42, atstkind_t0ype(atstype_bool)) ;
+ATStmpdec(tmp45, atstkind_t0ype(atstype_int)) ;
+/* tmpvardeclst(end) */
+ATSfunbody_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 896(line=43, offs=15) -- 1311(line=56, offs=21)
+*/
+ATSINSflab(__patsflab_loop_18):
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 990(line=44, offs=16) -- 999(line=44, offs=25)
+*/
+ATSINSmove(tmp27, ATSLIB_056_prelude__lt_g1int_int__19__1(arg0, arg1)) ;
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 987(line=44, offs=13) -- 1311(line=56, offs=21)
+*/
+ATSif(
+tmp27
+) ATSthen() {
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 1022(line=45, offs=18) -- 1027(line=45, offs=23)
+*/
+ATSINSmove(tmp35, atspre_g0int_mod_int(env0, arg0)) ;
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 1022(line=45, offs=18) -- 1031(line=45, offs=27)
+*/
+ATSINSmove(tmp32, ATSLIB_056_prelude__eq_g0int_int__7__2(tmp35, ATSPMVi0nt(0))) ;
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 1019(line=45, offs=15) -- 1120(line=48, offs=43)
+*/
+ATSif(
+tmp32
+) ATSthen() {
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 1053(line=46, offs=17) -- 1058(line=46, offs=22)
+*/
+ATSINSmove(tmpret26, ATSPMVbool_false()) ;
+} ATSelse() {
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 1094(line=48, offs=17) -- 1120(line=48, offs=43)
+*/
+ATSif(
+ATSPMVbool_true()
+) ATSthen() {
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 1094(line=48, offs=17) -- 1120(line=48, offs=43)
+*/
+ATSINSmove(tmp36, atspre_g1int_add_int(arg0, ATSPMVi0nt(1))) ;
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 1094(line=48, offs=17) -- 1120(line=48, offs=43)
+*/
+ATStailcal_beg()
+ATSINSmove_tlcal(apy0, tmp36) ;
+ATSINSmove_tlcal(apy1, arg1) ;
+ATSINSargmove_tlcal(arg0, apy0) ;
+ATSINSargmove_tlcal(arg1, apy1) ;
+ATSINSfgoto(__patsflab_loop_18) ;
+ATStailcal_end()
+
+} ATSelse() {
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 1094(line=48, offs=17) -- 1120(line=48, offs=43)
+*/
+ATSINSmove(tmpret26, ATSPMVbool_false()) ;
+} /* ATSendif */
+} /* ATSendif */
+} ATSelse() {
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 1155(line=50, offs=18) -- 1164(line=50, offs=27)
+*/
+ATSINSmove(tmp37, ATSLIB_056_prelude__eq_g1int_int__23__1(arg0, arg1)) ;
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 1152(line=50, offs=15) -- 1311(line=56, offs=21)
+*/
+ATSif(
+tmp37
+) ATSthen() {
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 1189(line=51, offs=20) -- 1194(line=51, offs=25)
+*/
+ATSINSmove(tmp45, atspre_g0int_mod_int(env0, arg0)) ;
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 1189(line=51, offs=20) -- 1198(line=51, offs=29)
+*/
+ATSINSmove(tmp42, ATSLIB_056_prelude__eq_g0int_int__7__3(tmp45, ATSPMVi0nt(0))) ;
+
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 1186(line=51, offs=17) -- 1271(line=54, offs=23)
+*/
+ATSif(
+tmp42
+) ATSthen() {
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 1222(line=52, offs=19) -- 1227(line=52, offs=24)
+*/
+ATSINSmove(tmpret26, ATSPMVbool_false()) ;
+} ATSelse() {
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 1267(line=54, offs=19) -- 1271(line=54, offs=23)
+*/
+ATSINSmove(tmpret26, ATSPMVbool_true()) ;
+} /* ATSendif */
+} ATSelse() {
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics.dats: 1307(line=56, offs=17) -- 1311(line=56, offs=21)
+*/
+ATSINSmove(tmpret26, ATSPMVbool_true()) ;
+} /* ATSendif */
+} /* ATSendif */
+ATSfunbody_end()
+ATSreturn(tmpret26) ;
+} /* end of [loop_18] */
+
+#if(0)
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats: 12520(line=650, offs=3) -- 12559(line=650, offs=42)
+*/
+/*
+local: 
+global: lt_g1int_int$19$0(level=0)
+local: 
+global: 
+*/
+ATSextern()
+/*
+imparg = tk(4697)
+tmparg = S2Evar(tk(4697))
+tmpsub = None()
+*/
+atstkind_t0ype(atstype_bool)
+ATSLIB_056_prelude__lt_g1int_int__19(atstkind_t0ype(atstyvar_type(tk)) arg0, atstkind_t0ype(atstype_int) arg1)
+{
+/* tmpvardeclst(beg) */
+ATStmpdec(tmpret28, atstkind_t0ype(atstype_bool)) ;
+ATStmpdec(tmp29, atstkind_t0ype(atstyvar_type(tk))) ;
+/* tmpvardeclst(end) */
+ATSfunbody_beg()
+/*
+emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12505(line=649, offs=1) -- 12559(line=650, offs=42)
+*/
+ATSINSflab(__patsflab_lt_g1int_int):
+/*
+emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12546(line=650, offs=29) -- 12557(line=650, offs=40)
+*/
+ATSINSmove(tmp29, PMVtmpltcst(g1int2int<S2Eextkind(atstype_int), S2Evar(tk(4697))>)(arg1)) ;
+
+/*
+emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12529(line=650, offs=12) -- 12559(line=650, offs=42)
+*/
+ATSINSmove(tmpret28, PMVtmpltcst(g1int_lt<S2Evar(tk(4697))>)(arg0, tmp29)) ;
+
+ATSfunbody_end()
+ATSreturn(tmpret28) ;
+} /* end of [ATSLIB_056_prelude__lt_g1int_int__19] */
+#endif // end of [TEMPLATE]
+
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats: 12520(line=650, offs=3) -- 12559(line=650, offs=42)
+*/
+/*
+local: 
+global: lt_g1int_int$19$1(level=2)
+local: 
+global: 
+*/
+ATSstatic()
+/*
+imparg = tk(4697)
+tmparg = S2Evar(tk(4697))
+tmpsub = Some(tk(4697) -> S2Eextkind(atstype_int))
+*/
+atstkind_t0ype(atstype_bool)
+ATSLIB_056_prelude__lt_g1int_int__19__1(atstkind_t0ype(atstype_int) arg0, atstkind_t0ype(atstype_int) arg1)
+{
+/* tmpvardeclst(beg) */
+ATStmpdec(tmpret28__1, atstkind_t0ype(atstype_bool)) ;
+ATStmpdec(tmp29__1, atstkind_t0ype(atstype_int)) ;
+/* tmpvardeclst(end) */
+ATSfunbody_beg()
+/*
+emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12505(line=649, offs=1) -- 12559(line=650, offs=42)
+*/
+ATSINSflab(__patsflab_lt_g1int_int):
+/*
+emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12546(line=650, offs=29) -- 12557(line=650, offs=40)
+*/
+ATSINSmove(tmp29__1, atspre_g1int2int_int_int(arg1)) ;
+
+/*
+emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12529(line=650, offs=12) -- 12559(line=650, offs=42)
+*/
+ATSINSmove(tmpret28__1, atspre_g1int_lt_int(arg0, tmp29__1)) ;
+
+ATSfunbody_end()
+ATSreturn(tmpret28__1) ;
+} /* end of [ATSLIB_056_prelude__lt_g1int_int__19__1] */
+
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats: 12259(line=635, offs=3) -- 12298(line=635, offs=42)
+*/
+/*
+local: 
+global: eq_g0int_int$7$2(level=2)
+local: 
+global: 
+*/
+ATSstatic()
+/*
+imparg = tk(4694)
+tmparg = S2Evar(tk(4694))
+tmpsub = Some(tk(4694) -> S2Eextkind(atstype_int))
+*/
+atstkind_t0ype(atstype_bool)
+ATSLIB_056_prelude__eq_g0int_int__7__2(atstkind_t0ype(atstype_int) arg0, atstkind_t0ype(atstype_int) arg1)
+{
+/* tmpvardeclst(beg) */
+ATStmpdec(tmpret9__2, atstkind_t0ype(atstype_bool)) ;
+ATStmpdec(tmp10__2, atstkind_t0ype(atstype_int)) ;
+/* tmpvardeclst(end) */
+ATSfunbody_beg()
+/*
+emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12244(line=634, offs=1) -- 12298(line=635, offs=42)
+*/
+ATSINSflab(__patsflab_eq_g0int_int):
+/*
+emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12285(line=635, offs=29) -- 12296(line=635, offs=40)
+*/
+ATSINSmove(tmp10__2, atspre_g0int2int_int_int(arg1)) ;
+
+/*
+emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12268(line=635, offs=12) -- 12298(line=635, offs=42)
+*/
+ATSINSmove(tmpret9__2, atspre_g0int_eq_int(arg0, tmp10__2)) ;
+
+ATSfunbody_end()
+ATSreturn(tmpret9__2) ;
+} /* end of [ATSLIB_056_prelude__eq_g0int_int__7__2] */
+
+#if(0)
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats: 12838(line=668, offs=3) -- 12877(line=668, offs=42)
+*/
+/*
+local: 
+global: eq_g1int_int$23$0(level=0)
+local: 
+global: 
+*/
+ATSextern()
+/*
+imparg = tk(4709)
+tmparg = S2Evar(tk(4709))
+tmpsub = None()
+*/
+atstkind_t0ype(atstype_bool)
+ATSLIB_056_prelude__eq_g1int_int__23(atstkind_t0ype(atstyvar_type(tk)) arg0, atstkind_t0ype(atstype_int) arg1)
+{
+/* tmpvardeclst(beg) */
+ATStmpdec(tmpret38, atstkind_t0ype(atstype_bool)) ;
+ATStmpdec(tmp39, atstkind_t0ype(atstyvar_type(tk))) ;
+/* tmpvardeclst(end) */
+ATSfunbody_beg()
+/*
+emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12823(line=667, offs=1) -- 12877(line=668, offs=42)
+*/
+ATSINSflab(__patsflab_eq_g1int_int):
+/*
+emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12864(line=668, offs=29) -- 12875(line=668, offs=40)
+*/
+ATSINSmove(tmp39, PMVtmpltcst(g1int2int<S2Eextkind(atstype_int), S2Evar(tk(4709))>)(arg1)) ;
+
+/*
+emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12847(line=668, offs=12) -- 12877(line=668, offs=42)
+*/
+ATSINSmove(tmpret38, PMVtmpltcst(g1int_eq<S2Evar(tk(4709))>)(arg0, tmp39)) ;
+
+ATSfunbody_end()
+ATSreturn(tmpret38) ;
+} /* end of [ATSLIB_056_prelude__eq_g1int_int__23] */
+#endif // end of [TEMPLATE]
+
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats: 12838(line=668, offs=3) -- 12877(line=668, offs=42)
+*/
+/*
+local: 
+global: eq_g1int_int$23$1(level=2)
+local: 
+global: 
+*/
+ATSstatic()
+/*
+imparg = tk(4709)
+tmparg = S2Evar(tk(4709))
+tmpsub = Some(tk(4709) -> S2Eextkind(atstype_int))
+*/
+atstkind_t0ype(atstype_bool)
+ATSLIB_056_prelude__eq_g1int_int__23__1(atstkind_t0ype(atstype_int) arg0, atstkind_t0ype(atstype_int) arg1)
+{
+/* tmpvardeclst(beg) */
+ATStmpdec(tmpret38__1, atstkind_t0ype(atstype_bool)) ;
+ATStmpdec(tmp39__1, atstkind_t0ype(atstype_int)) ;
+/* tmpvardeclst(end) */
+ATSfunbody_beg()
+/*
+emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12823(line=667, offs=1) -- 12877(line=668, offs=42)
+*/
+ATSINSflab(__patsflab_eq_g1int_int):
+/*
+emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12864(line=668, offs=29) -- 12875(line=668, offs=40)
+*/
+ATSINSmove(tmp39__1, atspre_g1int2int_int_int(arg1)) ;
+
+/*
+emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12847(line=668, offs=12) -- 12877(line=668, offs=42)
+*/
+ATSINSmove(tmpret38__1, atspre_g1int_eq_int(arg0, tmp39__1)) ;
+
+ATSfunbody_end()
+ATSreturn(tmpret38__1) ;
+} /* end of [ATSLIB_056_prelude__eq_g1int_int__23__1] */
+
+/*
+/usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats: 12259(line=635, offs=3) -- 12298(line=635, offs=42)
+*/
+/*
+local: 
+global: eq_g0int_int$7$3(level=2)
+local: 
+global: 
+*/
+ATSstatic()
+/*
+imparg = tk(4694)
+tmparg = S2Evar(tk(4694))
+tmpsub = Some(tk(4694) -> S2Eextkind(atstype_int))
+*/
+atstkind_t0ype(atstype_bool)
+ATSLIB_056_prelude__eq_g0int_int__7__3(atstkind_t0ype(atstype_int) arg0, atstkind_t0ype(atstype_int) arg1)
+{
+/* tmpvardeclst(beg) */
+ATStmpdec(tmpret9__3, atstkind_t0ype(atstype_bool)) ;
+ATStmpdec(tmp10__3, atstkind_t0ype(atstype_int)) ;
+/* tmpvardeclst(end) */
+ATSfunbody_beg()
+/*
+emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12244(line=634, offs=1) -- 12298(line=635, offs=42)
+*/
+ATSINSflab(__patsflab_eq_g0int_int):
+/*
+emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12285(line=635, offs=29) -- 12296(line=635, offs=40)
+*/
+ATSINSmove(tmp10__3, atspre_g0int2int_int_int(arg1)) ;
+
+/*
+emit_instr: loc0 = /usr/local/lib/ats2-postiats-0.3.8/prelude/DATS/integer.dats({$PATSPRE}/DATS/integer.dats): 12268(line=635, offs=12) -- 12298(line=635, offs=42)
+*/
+ATSINSmove(tmpret9__3, atspre_g0int_eq_int(arg0, tmp10__3)) ;
+
+ATSfunbody_end()
+ATSreturn(tmpret9__3) ;
+} /* end of [ATSLIB_056_prelude__eq_g0int_int__7__3] */
+
+/*
+/home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics-ffi.dats: 269(line=14, offs=24) -- 287(line=15, offs=13)
+*/
+/*
+local: is_prime_17$0(level=0)
+global: sqrt_bad_12$0(level=0), is_prime_17$0(level=0), is_prime_ats$27$0(level=0)
+local: 
+global: 
+*/
+ATSextern()
+atstkind_t0ype(atstype_bool)
+is_prime_ats(atstkind_t0ype(atstype_int) arg0)
+{
+/* tmpvardeclst(beg) */
+ATStmpdec(tmpret47, atstkind_t0ype(atstype_bool)) ;
+/* tmpvardeclst(end) */
+ATSfunbody_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics-ffi.dats: 256(line=14, offs=11) -- 288(line=15, offs=14)
+*/
+ATSINSflab(__patsflab_is_prime_ats):
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics-ffi.dats: 277(line=15, offs=3) -- 287(line=15, offs=13)
+*/
+ATSINSmove(tmpret47, is_prime_17(arg0)) ;
+
+ATSfunbody_end()
+ATSreturn(tmpret47) ;
+} /* end of [is_prime_ats] */
+
+/*
+/home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics-ffi.dats: 308(line=17, offs=19) -- 328(line=18, offs=12)
+*/
+/*
+local: exp_0$0(level=0)
+global: exp_0$0(level=0), exp_ats$28$0(level=0)
+local: 
+global: 
+*/
+ATSextern()
+atstkind_t0ype(atstype_int)
+exp_ats(atstkind_t0ype(atstype_int) arg0, atstkind_t0ype(atstype_int) arg1)
+{
+/* tmpvardeclst(beg) */
+ATStmpdec(tmpret48, atstkind_t0ype(atstype_int)) ;
+/* tmpvardeclst(end) */
+ATSfunbody_beg()
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics-ffi.dats: 300(line=17, offs=11) -- 328(line=18, offs=12)
+*/
+ATSINSflab(__patsflab_exp_ats):
+/*
+emit_instr: loc0 = /home/vanessa/programming/haskell/current/fast-combinatorics/ats-src/numerics-ffi.dats: 319(line=18, offs=3) -- 328(line=18, offs=12)
+*/
+ATSINSmove(tmpret48, exp_0(arg0, arg1)) ;
+
+ATSfunbody_end()
+ATSreturn(tmpret48) ;
+} /* end of [exp_ats] */
+
+/*
+** for initialization(dynloading)
+*/
+ATSdynloadflag_minit(_057_home_057_vanessa_057_programming_057_haskell_057_current_057_fast_055_combinatorics_057_ats_055_src_057_numerics_055_ffi_056_dats__dynloadflag) ;
+ATSextern()
+atsvoid_t0ype
+_057_home_057_vanessa_057_programming_057_haskell_057_current_057_fast_055_combinatorics_057_ats_055_src_057_numerics_055_ffi_056_dats__dynload()
+{
+ATSfunbody_beg()
+ATSdynload(/*void*/)
+ATSdynloadflag_sta(
+_057_home_057_vanessa_057_programming_057_haskell_057_current_057_fast_055_combinatorics_057_ats_055_src_057_numerics_055_ffi_056_dats__dynloadflag
+) ;
+ATSif(
+ATSCKiseqz(
+_057_home_057_vanessa_057_programming_057_haskell_057_current_057_fast_055_combinatorics_057_ats_055_src_057_numerics_055_ffi_056_dats__dynloadflag
+)
+) ATSthen() {
+ATSdynloadset(_057_home_057_vanessa_057_programming_057_haskell_057_current_057_fast_055_combinatorics_057_ats_055_src_057_numerics_055_ffi_056_dats__dynloadflag) ;
+/*
+dynexnlst-initize(beg)
+*/
+/*
+dynexnlst-initize(end)
+*/
+} /* ATSendif */
+ATSfunbody_end()
+ATSreturn_void(tmpret_void) ;
+} /* end of [*_dynload] */
+
+/* ****** ****** */
+
+/* end-of-compilation-unit */
diff --git a/fast-combinatorics.cabal b/fast-combinatorics.cabal
--- a/fast-combinatorics.cabal
+++ b/fast-combinatorics.cabal
@@ -1,5 +1,5 @@
 name:                fast-combinatorics
-version:             0.1.0.3
+version:             0.1.0.4
 synopsis:            Fast combinatorics.
 description:         Fast combinatorics code with a high level of safety guaranteed by writing it in ATS.
 homepage:            https://github.com//fast-combinatorics#readme
@@ -10,7 +10,8 @@
 copyright:           Copyright: (c) 2017 Vanessa McHale
 category:            Numerics
 build-type:          Custom
-extra-source-files:  cbits/fast-combinatorics.c
+extra-source-files:  cbits/combinatorics-ffi.c
+                   , cbits/numerics-ffi.c
                    , ATS2-Postiats-include-0.3.8/ccomp/runtime/pats_ccomp_config.h
 extra-doc-files:     README.md
 cabal-version:       >= 1.18
@@ -31,13 +32,16 @@
                  , directory
 
 library
-  c-sources:           cbits/fast-combinatorics.c
+  c-sources:           cbits/combinatorics-ffi.c
+                     , cbits/numerics-ffi.c
   include-dirs:        ATS2-Postiats-include-0.3.8/ccomp/runtime/
                      , ATS2-Postiats-include-0.3.8/
   hs-source-dirs:      src
   exposed-modules:     Numeric.Combinatorics
-  build-depends:       base >= 4.6 && < 5
-                     , composition-prelude >= 0.1.1.3
+                     , Numeric.Pure.Combinatorics
+                     , Numeric.Integer
+  build-depends:       base >= 4.7 && < 5
+                     , composition-prelude >= 0.1.1.4
   default-language:    Haskell2010
   if flag(development)
     ghc-options:       -Werror
@@ -52,8 +56,6 @@
   build-depends:       base
                      , fast-combinatorics
                      , hspec
-                     , combinatorics
-                     , arithmoi
   if flag(development)
     ghc-options: -Werror
   if impl(ghc >= 8.0)
@@ -68,7 +70,6 @@
   build-depends:       base
                      , fast-combinatorics
                      , criterion
-                     , combinatorics
   if flag(development)
     ghc-options: -Werror
   if impl(ghc >= 8.0)
diff --git a/src/Numeric/Integer.hs b/src/Numeric/Integer.hs
new file mode 100644
--- /dev/null
+++ b/src/Numeric/Integer.hs
@@ -0,0 +1,10 @@
+module Numeric.Integer ( integerExp
+                       ) where
+
+import           Control.Composition
+import           Foreign.C
+
+foreign import ccall unsafe exp_ats :: CInt -> CInt -> CInt
+
+integerExp :: Int -> Int -> Int
+integerExp = fromIntegral .* on exp_ats fromIntegral
diff --git a/src/Numeric/Pure/Combinatorics.hs b/src/Numeric/Pure/Combinatorics.hs
new file mode 100644
--- /dev/null
+++ b/src/Numeric/Pure/Combinatorics.hs
@@ -0,0 +1,16 @@
+module Numeric.Pure.Combinatorics ( hsIsPrime
+                                  , hsFactorial
+                                  , hsChoose
+                                  ) where
+
+hsIsPrime :: Int -> Bool
+hsIsPrime 1 = False
+hsIsPrime x = all ((/=0) . (x `mod`)) [2..m]
+    where m = floor (sqrt (fromIntegral x :: Float))
+
+hsFactorial :: Int -> Int
+hsFactorial 0 = 1
+hsFactorial n = n * hsFactorial (n-1)
+
+hsChoose :: Int -> Int -> Int
+hsChoose n k = product [ n + 1 - i | i <- [1..k] ] `div` hsFactorial k
diff --git a/test/Spec.hs b/test/Spec.hs
--- a/test/Spec.hs
+++ b/test/Spec.hs
@@ -1,18 +1,26 @@
 import           Numeric.Combinatorics
+import           Numeric.Integer
+import           Numeric.Pure.Combinatorics
 import           Test.Hspec
 import           Test.Hspec.QuickCheck
-import qualified Math.Combinatorics.Binomial as Ext
-import qualified Math.Combinatorics.Factorial as Ext
-import qualified Math.NumberTheory.Primes.Testing as Ext
 
+tooBig :: Int -> Int -> Bool
+tooBig x y = go x y >= 2 ^ (16 :: Integer)
+    where
+        go :: Int -> Int -> Integer
+        go m n = fromIntegral m ^ (fromIntegral n :: Integer)
+
 main :: IO ()
 main = hspec $ do
     parallel $ describe "factorial" $
         prop "should agree with the pure Haskell function" $
-            \x -> x < 1 || x > 12 || factorial x == Ext.factorial (fromIntegral x)
+            \x -> x < 1 || x > 12 || factorial x == hsFactorial x
     parallel $ describe "choose" $
         prop "should agree with the pure Haskell function" $
-            \x y -> x < 0 || y < 0 || x > 13 || y > 11 || (x `choose` y) == (x `Ext.choose` y)
+            \x y -> x < 0 || y < 0 || x > 13 || y > 11 || (x `choose` y) == (x `hsChoose` y)
     parallel $ describe "isPrime" $
         prop "should agree with the pure Haskell function" $
-            \x -> x < 1 || isPrime x == Ext.isCertifiedPrime (fromIntegral x)
+            \x -> x < 1 || isPrime x == hsIsPrime x
+    parallel $ describe "integerExp" $
+        prop "should agree with the pure Haskell function" $
+            \a k -> a < 0 || k < 0 || tooBig a k || (a == 0 && k == 0) || integerExp a k == a ^ k
