-- To start: -- source /bin/devghc -- To compile GHC -- make ilxGen/IlxGen.o hsc -- To compile ILXASM -- (cd /devel/fcom/src; make bin/ilxasm.exe) -- To compile to ILX -- (cd ilxGen/tests; ../../../driver/ghc-inplace --ilx test.hs) -- To generate a complete ILX file, including preludes for GHC and ILX: -- (cd ilxGen/tests/; cat prelude.ilx test.ilx /devel/fcom/src/ilxasm/stdlib-func.ilx > test.full.ilx) -- Run ILXASM to get a IL -- ( cd ilxGen/tests/; /devel/fcom/src/bin/ilxasm.exe --no-ilasm --no-stdlib test.full.ilx > test.il) -- To compile IL to .EXE or .DLL: -- With build of VS (e.g. Don & Andrew) -- ( cd ilxGen/tests/; cmd /C "c:\\bin\\devvs.bat && ilasm test.il") -- With Lightning SDK, where env. variables are on path (e.g. Reuben): -- ( cd ilxGen/tests/; ilasm test.il) -- To validate .EXE: -- (cd /devel/fcom/src; make bin/ilvalid.exe mscorlib.vlb) -- (export ILVALID_HOME=/devel/fcom/src; cd ilxGen/tests/; /devel/fcom/src/bin/ilvalid.exe test.il) -- To run unverifiable code: -- With build of VS (e.g. Don & Andrew) -- (cd ilxGen/tests/; cmd /C "c:\\bin\\devvs.bat && .\test.exe") -- With Lightning SDK, where env. variables are on path (e.g. Reuben): -- (cd ilxGen/tests/; ./test.exe) -- To compile ILX to verifiable code and verify -- (cd /devel/fcom/src; make bin/ilxasm.exe bin/ilverify.exe) && (cd ilxGen/tests/; export ILVALID_HOME=/devel/fcom/src; cat prelude.ilx test.ilx /devel/fcom/src/assem/stdlib-func.ilx > test.full.ilx && cd ilxGen/tests/; /devel/fcom/src/bin/ilxasm.exe --no-ilasm test.full.ilx > test.safe.il && /devel/fcom/src/bin/ilverify.exe test.safe.il) -- (cd ilxGen/tests/; cmd /C "c:\\bin\\devvs.bat && .\test.safe.exe") --append:: [Char] -> [Char] -> [Char] --append [] l2 = l2 --append (h:t) l2 = h:append t l2 data N = Z | S N chooseN n = case n of Z -> "even\n" S Z -> "odd\n" S (S m) -> chooseN m signN n = case n of Z -> Z S Z -> S Z S (S m) -> signN m add n m = case n of Z -> m S nn -> S (add nn m) mul n m = case n of Z -> Z S nn -> add m (mul nn m) pow n m = case m of Z -> S Z S mm -> mul n (pow n mm) sq n = mul n n n1 = S Z n2 = add n1 n1 n4 = add n2 n2 n6 = add n2 n4 n8 = add n2 n6 n10 = add n2 n8 n11 = add n1 n10 n12 = add n1 n11 n13 = add n1 n12 n14 = add n1 n13 n15 = add n1 n14 n16 = add n1 n15 n17 = add n1 n16 n18 = add n1 n17 n19 = add n1 n18 n20 = add n1 n18 bign = pow n2 n19 bign1 = add bign n1 foldn f n acc = case n of Z -> acc S x -> foldn f x (f n acc) main = putStr (chooseN (foldn (\x y -> add (signN x) y) (pow n2 n4) n1))