diff --git a/Epic/Compiler.lhs b/Epic/Compiler.lhs
--- a/Epic/Compiler.lhs
+++ b/Epic/Compiler.lhs
@@ -84,7 +84,7 @@
 >                 checked <- compileDecls simplified tmph hdr
 >                 fp <- getDataFileName "evm/closure.h"
 >                 let libdir = trimLast fp
->                 let cmd = "gcc -c -g -foptimize-sibling-calls -x c " ++ tmpn ++ " -I" ++ libdir ++ " -o " ++ outf ++ " " ++ addGCC opts ++ doTrace opts
+>                 let cmd = "gcc -c -O3 -foptimize-sibling-calls -x c " ++ tmpn ++ " -I" ++ libdir ++ " -o " ++ outf ++ " " ++ addGCC opts ++ doTrace opts
 >                 -- putStrLn $ cmd
 >                 -- putStrLn $ fp
 >                 exit <- system cmd
@@ -126,7 +126,7 @@
 >     mainprog <- if genmain then mkMain extraIncs else return ""
 >     fp <- getDataFileName "evm/closure.h"
 >     let libdir = trimLast fp
->     let cmd = "gcc -x c -g -foptimize-sibling-calls " ++ mainprog ++ " -x none -L" ++
+>     let cmd = "gcc -x c -O3 -foptimize-sibling-calls " ++ mainprog ++ " -x none -L" ++
 >               libdir++" -I"++libdir ++ " " ++
 >               (concat (map (++" ") infs)) ++ 
 >               " -levm -lgc -lpthread -lgmp -o "++outf
diff --git a/dist/build/Epic/Parser.hs b/dist/build/Epic/Parser.hs
--- a/dist/build/Epic/Parser.hs
+++ b/dist/build/Epic/Parser.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fno-warn-overlapping-patterns #-}
 {-# OPTIONS -fglasgow-exts -cpp #-}
 -- -*-Haskell-*-
 {-# OPTIONS_GHC -fglasgow-exts #-}
@@ -10,131 +11,131 @@
 import Epic.Language
 import Epic.Lexer
 #if __GLASGOW_HASKELL__ >= 503
-import Data.Array
+import qualified Data.Array as Happy_Data_Array
 #else
-import Array
+import qualified Array as Happy_Data_Array
 #endif
 #if __GLASGOW_HASKELL__ >= 503
-import GHC.Exts
+import qualified GHC.Exts as Happy_GHC_Exts
 #else
-import GlaExts
+import qualified GlaExts as Happy_GHC_Exts
 #endif
 
--- parser produced by Happy Version 1.18.2
+-- parser produced by Happy Version 1.18.4
 
 newtype HappyAbsSyn  = HappyAbsSyn HappyAny
 #if __GLASGOW_HASKELL__ >= 607
-type HappyAny = GHC.Exts.Any
+type HappyAny = Happy_GHC_Exts.Any
 #else
 type HappyAny = forall a . a
 #endif
 happyIn4 :: ([Decl]) -> (HappyAbsSyn )
-happyIn4 x = unsafeCoerce# x
+happyIn4 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyIn4 #-}
 happyOut4 :: (HappyAbsSyn ) -> ([Decl])
-happyOut4 x = unsafeCoerce# x
+happyOut4 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut4 #-}
 happyIn5 :: (Type) -> (HappyAbsSyn )
-happyIn5 x = unsafeCoerce# x
+happyIn5 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyIn5 #-}
 happyOut5 :: (HappyAbsSyn ) -> (Type)
-happyOut5 x = unsafeCoerce# x
+happyOut5 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut5 #-}
 happyIn6 :: (Decl) -> (HappyAbsSyn )
-happyIn6 x = unsafeCoerce# x
+happyIn6 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyIn6 #-}
 happyOut6 :: (HappyAbsSyn ) -> (Decl)
-happyOut6 x = unsafeCoerce# x
+happyOut6 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut6 #-}
 happyIn7 :: ([CGFlag]) -> (HappyAbsSyn )
-happyIn7 x = unsafeCoerce# x
+happyIn7 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyIn7 #-}
 happyOut7 :: (HappyAbsSyn ) -> ([CGFlag])
-happyOut7 x = unsafeCoerce# x
+happyOut7 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut7 #-}
 happyIn8 :: (CGFlag) -> (HappyAbsSyn )
-happyIn8 x = unsafeCoerce# x
+happyIn8 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyIn8 #-}
 happyOut8 :: (HappyAbsSyn ) -> (CGFlag)
-happyOut8 x = unsafeCoerce# x
+happyOut8 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut8 #-}
 happyIn9 :: (Maybe String) -> (HappyAbsSyn )
-happyIn9 x = unsafeCoerce# x
+happyIn9 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyIn9 #-}
 happyOut9 :: (HappyAbsSyn ) -> (Maybe String)
-happyOut9 x = unsafeCoerce# x
+happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut9 #-}
 happyIn10 :: ([(Name,Type)]) -> (HappyAbsSyn )
-happyIn10 x = unsafeCoerce# x
+happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyIn10 #-}
 happyOut10 :: (HappyAbsSyn ) -> ([(Name,Type)])
-happyOut10 x = unsafeCoerce# x
+happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut10 #-}
 happyIn11 :: (Expr) -> (HappyAbsSyn )
-happyIn11 x = unsafeCoerce# x
+happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyIn11 #-}
 happyOut11 :: (HappyAbsSyn ) -> (Expr)
-happyOut11 x = unsafeCoerce# x
+happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut11 #-}
 happyIn12 :: (Expr) -> (HappyAbsSyn )
-happyIn12 x = unsafeCoerce# x
+happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyIn12 #-}
 happyOut12 :: (HappyAbsSyn ) -> (Expr)
-happyOut12 x = unsafeCoerce# x
+happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut12 #-}
 happyIn13 :: ([CaseAlt]) -> (HappyAbsSyn )
-happyIn13 x = unsafeCoerce# x
+happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyIn13 #-}
 happyOut13 :: (HappyAbsSyn ) -> ([CaseAlt])
-happyOut13 x = unsafeCoerce# x
+happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut13 #-}
 happyIn14 :: (CaseAlt) -> (HappyAbsSyn )
-happyIn14 x = unsafeCoerce# x
+happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyIn14 #-}
 happyOut14 :: (HappyAbsSyn ) -> (CaseAlt)
-happyOut14 x = unsafeCoerce# x
+happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut14 #-}
 happyIn15 :: (Expr) -> (HappyAbsSyn )
-happyIn15 x = unsafeCoerce# x
+happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyIn15 #-}
 happyOut15 :: (HappyAbsSyn ) -> (Expr)
-happyOut15 x = unsafeCoerce# x
+happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut15 #-}
 happyIn16 :: ([Expr]) -> (HappyAbsSyn )
-happyIn16 x = unsafeCoerce# x
+happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyIn16 #-}
 happyOut16 :: (HappyAbsSyn ) -> ([Expr])
-happyOut16 x = unsafeCoerce# x
+happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut16 #-}
 happyIn17 :: ([(Expr,Type)]) -> (HappyAbsSyn )
-happyIn17 x = unsafeCoerce# x
+happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyIn17 #-}
 happyOut17 :: (HappyAbsSyn ) -> ([(Expr,Type)])
-happyOut17 x = unsafeCoerce# x
+happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut17 #-}
 happyIn18 :: (Const) -> (HappyAbsSyn )
-happyIn18 x = unsafeCoerce# x
+happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyIn18 #-}
 happyOut18 :: (HappyAbsSyn ) -> (Const)
-happyOut18 x = unsafeCoerce# x
+happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut18 #-}
 happyIn19 :: (LineNumber) -> (HappyAbsSyn )
-happyIn19 x = unsafeCoerce# x
+happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyIn19 #-}
 happyOut19 :: (HappyAbsSyn ) -> (LineNumber)
-happyOut19 x = unsafeCoerce# x
+happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut19 #-}
 happyIn20 :: (String) -> (HappyAbsSyn )
-happyIn20 x = unsafeCoerce# x
+happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyIn20 #-}
 happyOut20 :: (HappyAbsSyn ) -> (String)
-happyOut20 x = unsafeCoerce# x
+happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut20 #-}
 happyInTok :: (Token) -> (HappyAbsSyn )
-happyInTok x = unsafeCoerce# x
+happyInTok x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyInTok #-}
 happyOutTok :: (HappyAbsSyn ) -> (Token)
-happyOutTok x = unsafeCoerce# x
+happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOutTok #-}
 
 
@@ -153,7 +154,7 @@
 happyTable :: HappyAddr
 happyTable = HappyA# "\x00\x00\x12\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x5d\x00\x02\x00\x56\x00\x5d\x00\x03\x00\x57\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\xa4\x00\x8e\x00\x40\x00\x41\x00\xad\x00\x42\x00\x43\x00\x67\x00\x44\x00\x77\x00\x67\x00\x45\x00\x46\x00\x13\x00\x47\x00\xaa\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x16\x00\x5d\x00\x08\x00\x4d\x00\x90\x00\x03\x00\x4e\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x78\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x88\x00\x67\x00\x68\x00\x8d\x00\x8e\x00\x5d\x00\x91\x00\x92\x00\x05\x00\x06\x00\x07\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x93\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x7a\x00\x67\x00\x68\x00\x0b\x00\x5d\x00\x08\x00\x53\x00\x30\x00\x03\x00\x31\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x2f\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xa4\x00\x67\x00\x68\x00\x1f\x00\x95\x00\x34\x00\x1b\x00\x5d\x00\x35\x00\xb2\x00\xb0\x00\x36\x00\x17\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x18\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xac\x00\x67\x00\x68\x00\x5d\x00\x9b\x00\x13\x00\x10\x00\x0f\x00\x10\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x1a\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x5d\x00\x67\x00\x68\x00\x9c\x00\xb0\x00\xa7\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\xaa\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x5d\x00\x67\x00\x68\x00\x86\x00\x98\x00\x9f\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\xa1\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x9e\x00\x67\x00\x68\x00\x80\x00\x5d\x00\xad\x00\xa0\x00\x8c\x00\xa2\x00\x8d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x95\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x5d\x00\x67\x00\x68\x00\x82\x00\x84\x00\x8b\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x88\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x99\x00\x67\x00\x68\x00\x5d\x00\x83\x00\x75\x00\x6a\x00\x76\x00\x7d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x7f\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x53\x00\x67\x00\x68\x00\x5d\x00\x85\x00\x55\x00\x5b\x00\x58\x00\x33\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x5c\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x1a\x00\x67\x00\x68\x00\x5d\x00\x7e\x00\x1a\x00\x2e\x00\x2d\x00\x2f\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x1f\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x5d\x00\x67\x00\x68\x00\x1e\x00\x1b\x00\x1d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x1a\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x5d\x00\x67\x00\x68\x00\x15\x00\x16\x00\x0b\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\xff\xff\x0d\x00\x63\x00\x64\x00\x65\x00\x66\x00\x5d\x00\x67\x00\x68\x00\x0e\x00\x00\x00\x0f\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x5d\x00\x00\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x67\x00\x60\x00\x61\x00\x05\x00\x06\x00\x07\x00\x00\x00\x0a\x00\x00\x00\xfe\xff\x67\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x95\x00\x34\x00\x00\x00\x00\x00\x35\x00\x00\x00\x99\x00\x36\x00\x95\x00\x34\x00\x00\x00\x00\x00\x35\x00\x00\x00\x96\x00\x36\x00\x4f\x00\x34\x00\x00\x00\x00\x00\x35\x00\x80\x00\x00\x00\x36\x00\x4f\x00\x34\x00\x00\x00\x00\x00\x35\x00\x89\x00\x00\x00\x36\x00\x4f\x00\x34\x00\x00\x00\x00\x00\x35\x00\x73\x00\x00\x00\x36\x00\x4f\x00\x34\x00\xb2\x00\x34\x00\x35\x00\x50\x00\x35\x00\x36\x00\x00\x00\x36\x00\xae\x00\x34\x00\xa5\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\xa7\x00\x34\x00\xa8\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x9c\x00\x34\x00\xa2\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x93\x00\x34\x00\x86\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x68\x00\x34\x00\x6a\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x6b\x00\x34\x00\x6c\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x6d\x00\x34\x00\x6e\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x6f\x00\x34\x00\x70\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x71\x00\x34\x00\x72\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x78\x00\x34\x00\x79\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x7b\x00\x34\x00\x4e\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x51\x00\x34\x00\x58\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x59\x00\x34\x00\x33\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x07\x00\x36\x00\x08\x00\x00\x00\x00\x00\x03\x00\x00\x00\x05\x00\x06\x00\x07\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
 
-happyReduceArr = array (1, 81) [
+happyReduceArr = Happy_Data_Array.array (1, 81) [
 	(1 , happyReduce_1),
 	(2 , happyReduce_2),
 	(3 , happyReduce_3),
@@ -1087,7 +1088,7 @@
 {-# LINE 28 "templates/GenericTemplate.hs" #-}
 
 
-data Happy_IntList = HappyCons Int# Happy_IntList
+data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList
 
 
 
@@ -1132,19 +1133,19 @@
 				     happyFail i tk st
 		-1# 	  -> {- nothing -}
 				     happyAccept i tk st
-		n | (n <# (0# :: Int#)) -> {- nothing -}
+		n | (n Happy_GHC_Exts.<# (0# :: Happy_GHC_Exts.Int#)) -> {- nothing -}
 
-				     (happyReduceArr ! rule) i tk st
-				     where rule = (I# ((negateInt# ((n +# (1# :: Int#))))))
+				     (happyReduceArr Happy_Data_Array.! rule) i tk st
+				     where rule = (Happy_GHC_Exts.I# ((Happy_GHC_Exts.negateInt# ((n Happy_GHC_Exts.+# (1# :: Happy_GHC_Exts.Int#))))))
 		n		  -> {- nothing -}
 
 
 				     happyShift new_state i tk st
-				     where new_state = (n -# (1# :: Int#))
+				     where new_state = (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#))
    where off    = indexShortOffAddr happyActOffsets st
-	 off_i  = (off +# i)
-	 check  = if (off_i >=# (0# :: Int#))
-			then (indexShortOffAddr happyCheck off_i ==#  i)
+	 off_i  = (off Happy_GHC_Exts.+# i)
+	 check  = if (off_i Happy_GHC_Exts.>=# (0# :: Happy_GHC_Exts.Int#))
+			then (indexShortOffAddr happyCheck off_i Happy_GHC_Exts.==#  i)
 			else False
  	 action | check     = indexShortOffAddr happyTable off_i
 		| otherwise = indexShortOffAddr happyDefActions st
@@ -1154,27 +1155,27 @@
 
 indexShortOffAddr (HappyA# arr) off =
 #if __GLASGOW_HASKELL__ > 500
-	narrow16Int# i
+	Happy_GHC_Exts.narrow16Int# i
 #elif __GLASGOW_HASKELL__ == 500
-	intToInt16# i
+	Happy_GHC_Exts.intToInt16# i
 #else
-	(i `iShiftL#` 16#) `iShiftRA#` 16#
+	Happy_GHC_Exts.iShiftRA# (Happy_GHC_Exts.iShiftL# i 16#) 16#
 #endif
   where
 #if __GLASGOW_HASKELL__ >= 503
-	i = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low)
+	i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.uncheckedShiftL# high 8#) low)
 #else
-	i = word2Int# ((high `shiftL#` 8#) `or#` low)
+	i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.shiftL# high 8#) low)
 #endif
-	high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))
-	low  = int2Word# (ord# (indexCharOffAddr# arr off'))
-	off' = off *# 2#
+	high = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr (off' Happy_GHC_Exts.+# 1#)))
+	low  = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr off'))
+	off' = off Happy_GHC_Exts.*# 2#
 
 
 
 
 
-data HappyAddr = HappyA# Addr#
+data HappyAddr = HappyA# Happy_GHC_Exts.Addr#
 
 
 
@@ -1188,7 +1189,7 @@
 -- Shifting a token
 
 happyShift new_state 0# tk st sts stk@(x `HappyStk` _) =
-     let i = (case unsafeCoerce# x of { (I# (i)) -> i }) in
+     let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in
 --     trace "shifting the error token" $
      happyDoAction i tk new_state (HappyCons (st) (sts)) (stk)
 
@@ -1223,7 +1224,7 @@
 happyReduce k i fn 0# tk st sts stk
      = happyFail 0# tk st sts stk
 happyReduce k nt fn j tk st sts stk
-     = case happyDrop (k -# (1# :: Int#)) sts of
+     = case happyDrop (k Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) sts of
 	 sts1@((HappyCons (st1@(action)) (_))) ->
         	let r = fn stk in  -- it doesn't hurt to always seq here...
        		happyDoSeq r (happyGoto nt j tk st1 sts1 r)
@@ -1243,17 +1244,17 @@
              drop_stk = happyDropStk k stk
 
              off    = indexShortOffAddr happyGotoOffsets st1
-             off_i  = (off +# nt)
+             off_i  = (off Happy_GHC_Exts.+# nt)
              new_state = indexShortOffAddr happyTable off_i
 
 
 
 
 happyDrop 0# l = l
-happyDrop n (HappyCons (_) (t)) = happyDrop (n -# (1# :: Int#)) t
+happyDrop n (HappyCons (_) (t)) = happyDrop (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) t
 
 happyDropStk 0# l = l
-happyDropStk n (x `HappyStk` xs) = happyDropStk (n -# (1#::Int#)) xs
+happyDropStk n (x `HappyStk` xs) = happyDropStk (n Happy_GHC_Exts.-# (1#::Happy_GHC_Exts.Int#)) xs
 
 -----------------------------------------------------------------------------
 -- Moving to a new state after a reduction
@@ -1263,7 +1264,7 @@
    {- nothing -}
    happyDoAction j tk new_state
    where off    = indexShortOffAddr happyGotoOffsets st
-	 off_i  = (off +# nt)
+	 off_i  = (off Happy_GHC_Exts.+# nt)
  	 new_state = indexShortOffAddr happyTable off_i
 
 
@@ -1292,7 +1293,7 @@
 --                       save the old token and carry on.
 happyFail  i tk (action) sts stk =
 --      trace "entering error recovery" $
-	happyDoAction 0# tk action sts ( (unsafeCoerce# (I# (i))) `HappyStk` stk)
+	happyDoAction 0# tk action sts ( (Happy_GHC_Exts.unsafeCoerce# (Happy_GHC_Exts.I# (i))) `HappyStk` stk)
 
 -- Internal happy errors:
 
@@ -1302,7 +1303,7 @@
 -- Hack to get the typechecker to accept our action functions
 
 
-happyTcHack :: Int# -> a -> a
+happyTcHack :: Happy_GHC_Exts.Int# -> a -> a
 happyTcHack x y = y
 {-# INLINE happyTcHack #-}
 
diff --git a/dist/build/Epic/epic-tmp/Epic/Parser.hs b/dist/build/Epic/epic-tmp/Epic/Parser.hs
--- a/dist/build/Epic/epic-tmp/Epic/Parser.hs
+++ b/dist/build/Epic/epic-tmp/Epic/Parser.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fno-warn-overlapping-patterns #-}
 {-# OPTIONS -fglasgow-exts -cpp #-}
 -- -*-Haskell-*-
 {-# OPTIONS_GHC -fglasgow-exts #-}
@@ -10,131 +11,131 @@
 import Epic.Language
 import Epic.Lexer
 #if __GLASGOW_HASKELL__ >= 503
-import Data.Array
+import qualified Data.Array as Happy_Data_Array
 #else
-import Array
+import qualified Array as Happy_Data_Array
 #endif
 #if __GLASGOW_HASKELL__ >= 503
-import GHC.Exts
+import qualified GHC.Exts as Happy_GHC_Exts
 #else
-import GlaExts
+import qualified GlaExts as Happy_GHC_Exts
 #endif
 
--- parser produced by Happy Version 1.18.2
+-- parser produced by Happy Version 1.18.4
 
 newtype HappyAbsSyn  = HappyAbsSyn HappyAny
 #if __GLASGOW_HASKELL__ >= 607
-type HappyAny = GHC.Exts.Any
+type HappyAny = Happy_GHC_Exts.Any
 #else
 type HappyAny = forall a . a
 #endif
 happyIn4 :: ([Decl]) -> (HappyAbsSyn )
-happyIn4 x = unsafeCoerce# x
+happyIn4 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyIn4 #-}
 happyOut4 :: (HappyAbsSyn ) -> ([Decl])
-happyOut4 x = unsafeCoerce# x
+happyOut4 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut4 #-}
 happyIn5 :: (Type) -> (HappyAbsSyn )
-happyIn5 x = unsafeCoerce# x
+happyIn5 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyIn5 #-}
 happyOut5 :: (HappyAbsSyn ) -> (Type)
-happyOut5 x = unsafeCoerce# x
+happyOut5 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut5 #-}
 happyIn6 :: (Decl) -> (HappyAbsSyn )
-happyIn6 x = unsafeCoerce# x
+happyIn6 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyIn6 #-}
 happyOut6 :: (HappyAbsSyn ) -> (Decl)
-happyOut6 x = unsafeCoerce# x
+happyOut6 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut6 #-}
 happyIn7 :: ([CGFlag]) -> (HappyAbsSyn )
-happyIn7 x = unsafeCoerce# x
+happyIn7 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyIn7 #-}
 happyOut7 :: (HappyAbsSyn ) -> ([CGFlag])
-happyOut7 x = unsafeCoerce# x
+happyOut7 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut7 #-}
 happyIn8 :: (CGFlag) -> (HappyAbsSyn )
-happyIn8 x = unsafeCoerce# x
+happyIn8 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyIn8 #-}
 happyOut8 :: (HappyAbsSyn ) -> (CGFlag)
-happyOut8 x = unsafeCoerce# x
+happyOut8 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut8 #-}
 happyIn9 :: (Maybe String) -> (HappyAbsSyn )
-happyIn9 x = unsafeCoerce# x
+happyIn9 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyIn9 #-}
 happyOut9 :: (HappyAbsSyn ) -> (Maybe String)
-happyOut9 x = unsafeCoerce# x
+happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut9 #-}
 happyIn10 :: ([(Name,Type)]) -> (HappyAbsSyn )
-happyIn10 x = unsafeCoerce# x
+happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyIn10 #-}
 happyOut10 :: (HappyAbsSyn ) -> ([(Name,Type)])
-happyOut10 x = unsafeCoerce# x
+happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut10 #-}
 happyIn11 :: (Expr) -> (HappyAbsSyn )
-happyIn11 x = unsafeCoerce# x
+happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyIn11 #-}
 happyOut11 :: (HappyAbsSyn ) -> (Expr)
-happyOut11 x = unsafeCoerce# x
+happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut11 #-}
 happyIn12 :: (Expr) -> (HappyAbsSyn )
-happyIn12 x = unsafeCoerce# x
+happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyIn12 #-}
 happyOut12 :: (HappyAbsSyn ) -> (Expr)
-happyOut12 x = unsafeCoerce# x
+happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut12 #-}
 happyIn13 :: ([CaseAlt]) -> (HappyAbsSyn )
-happyIn13 x = unsafeCoerce# x
+happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyIn13 #-}
 happyOut13 :: (HappyAbsSyn ) -> ([CaseAlt])
-happyOut13 x = unsafeCoerce# x
+happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut13 #-}
 happyIn14 :: (CaseAlt) -> (HappyAbsSyn )
-happyIn14 x = unsafeCoerce# x
+happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyIn14 #-}
 happyOut14 :: (HappyAbsSyn ) -> (CaseAlt)
-happyOut14 x = unsafeCoerce# x
+happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut14 #-}
 happyIn15 :: (Expr) -> (HappyAbsSyn )
-happyIn15 x = unsafeCoerce# x
+happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyIn15 #-}
 happyOut15 :: (HappyAbsSyn ) -> (Expr)
-happyOut15 x = unsafeCoerce# x
+happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut15 #-}
 happyIn16 :: ([Expr]) -> (HappyAbsSyn )
-happyIn16 x = unsafeCoerce# x
+happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyIn16 #-}
 happyOut16 :: (HappyAbsSyn ) -> ([Expr])
-happyOut16 x = unsafeCoerce# x
+happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut16 #-}
 happyIn17 :: ([(Expr,Type)]) -> (HappyAbsSyn )
-happyIn17 x = unsafeCoerce# x
+happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyIn17 #-}
 happyOut17 :: (HappyAbsSyn ) -> ([(Expr,Type)])
-happyOut17 x = unsafeCoerce# x
+happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut17 #-}
 happyIn18 :: (Const) -> (HappyAbsSyn )
-happyIn18 x = unsafeCoerce# x
+happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyIn18 #-}
 happyOut18 :: (HappyAbsSyn ) -> (Const)
-happyOut18 x = unsafeCoerce# x
+happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut18 #-}
 happyIn19 :: (LineNumber) -> (HappyAbsSyn )
-happyIn19 x = unsafeCoerce# x
+happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyIn19 #-}
 happyOut19 :: (HappyAbsSyn ) -> (LineNumber)
-happyOut19 x = unsafeCoerce# x
+happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut19 #-}
 happyIn20 :: (String) -> (HappyAbsSyn )
-happyIn20 x = unsafeCoerce# x
+happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyIn20 #-}
 happyOut20 :: (HappyAbsSyn ) -> (String)
-happyOut20 x = unsafeCoerce# x
+happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut20 #-}
 happyInTok :: (Token) -> (HappyAbsSyn )
-happyInTok x = unsafeCoerce# x
+happyInTok x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyInTok #-}
 happyOutTok :: (HappyAbsSyn ) -> (Token)
-happyOutTok x = unsafeCoerce# x
+happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOutTok #-}
 
 
@@ -153,7 +154,7 @@
 happyTable :: HappyAddr
 happyTable = HappyA# "\x00\x00\x12\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x5d\x00\x02\x00\x56\x00\x5d\x00\x03\x00\x57\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\xa4\x00\x8e\x00\x40\x00\x41\x00\xad\x00\x42\x00\x43\x00\x67\x00\x44\x00\x77\x00\x67\x00\x45\x00\x46\x00\x13\x00\x47\x00\xaa\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x16\x00\x5d\x00\x08\x00\x4d\x00\x90\x00\x03\x00\x4e\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x78\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x88\x00\x67\x00\x68\x00\x8d\x00\x8e\x00\x5d\x00\x91\x00\x92\x00\x05\x00\x06\x00\x07\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x93\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x7a\x00\x67\x00\x68\x00\x0b\x00\x5d\x00\x08\x00\x53\x00\x30\x00\x03\x00\x31\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x2f\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xa4\x00\x67\x00\x68\x00\x1f\x00\x95\x00\x34\x00\x1b\x00\x5d\x00\x35\x00\xb2\x00\xb0\x00\x36\x00\x17\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x18\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xac\x00\x67\x00\x68\x00\x5d\x00\x9b\x00\x13\x00\x10\x00\x0f\x00\x10\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x1a\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x5d\x00\x67\x00\x68\x00\x9c\x00\xb0\x00\xa7\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\xaa\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x5d\x00\x67\x00\x68\x00\x86\x00\x98\x00\x9f\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\xa1\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x9e\x00\x67\x00\x68\x00\x80\x00\x5d\x00\xad\x00\xa0\x00\x8c\x00\xa2\x00\x8d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x95\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x5d\x00\x67\x00\x68\x00\x82\x00\x84\x00\x8b\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x88\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x99\x00\x67\x00\x68\x00\x5d\x00\x83\x00\x75\x00\x6a\x00\x76\x00\x7d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x7f\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x53\x00\x67\x00\x68\x00\x5d\x00\x85\x00\x55\x00\x5b\x00\x58\x00\x33\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x5c\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x1a\x00\x67\x00\x68\x00\x5d\x00\x7e\x00\x1a\x00\x2e\x00\x2d\x00\x2f\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x1f\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x5d\x00\x67\x00\x68\x00\x1e\x00\x1b\x00\x1d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x1a\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x5d\x00\x67\x00\x68\x00\x15\x00\x16\x00\x0b\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\xff\xff\x0d\x00\x63\x00\x64\x00\x65\x00\x66\x00\x5d\x00\x67\x00\x68\x00\x0e\x00\x00\x00\x0f\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x5d\x00\x00\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x67\x00\x60\x00\x61\x00\x05\x00\x06\x00\x07\x00\x00\x00\x0a\x00\x00\x00\xfe\xff\x67\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x95\x00\x34\x00\x00\x00\x00\x00\x35\x00\x00\x00\x99\x00\x36\x00\x95\x00\x34\x00\x00\x00\x00\x00\x35\x00\x00\x00\x96\x00\x36\x00\x4f\x00\x34\x00\x00\x00\x00\x00\x35\x00\x80\x00\x00\x00\x36\x00\x4f\x00\x34\x00\x00\x00\x00\x00\x35\x00\x89\x00\x00\x00\x36\x00\x4f\x00\x34\x00\x00\x00\x00\x00\x35\x00\x73\x00\x00\x00\x36\x00\x4f\x00\x34\x00\xb2\x00\x34\x00\x35\x00\x50\x00\x35\x00\x36\x00\x00\x00\x36\x00\xae\x00\x34\x00\xa5\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\xa7\x00\x34\x00\xa8\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x9c\x00\x34\x00\xa2\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x93\x00\x34\x00\x86\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x68\x00\x34\x00\x6a\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x6b\x00\x34\x00\x6c\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x6d\x00\x34\x00\x6e\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x6f\x00\x34\x00\x70\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x71\x00\x34\x00\x72\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x78\x00\x34\x00\x79\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x7b\x00\x34\x00\x4e\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x51\x00\x34\x00\x58\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x00\x00\x36\x00\x59\x00\x34\x00\x33\x00\x34\x00\x35\x00\x00\x00\x35\x00\x36\x00\x07\x00\x36\x00\x08\x00\x00\x00\x00\x00\x03\x00\x00\x00\x05\x00\x06\x00\x07\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
 
-happyReduceArr = array (1, 81) [
+happyReduceArr = Happy_Data_Array.array (1, 81) [
 	(1 , happyReduce_1),
 	(2 , happyReduce_2),
 	(3 , happyReduce_3),
@@ -1087,7 +1088,7 @@
 {-# LINE 28 "templates/GenericTemplate.hs" #-}
 
 
-data Happy_IntList = HappyCons Int# Happy_IntList
+data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList
 
 
 
@@ -1132,19 +1133,19 @@
 				     happyFail i tk st
 		-1# 	  -> {- nothing -}
 				     happyAccept i tk st
-		n | (n <# (0# :: Int#)) -> {- nothing -}
+		n | (n Happy_GHC_Exts.<# (0# :: Happy_GHC_Exts.Int#)) -> {- nothing -}
 
-				     (happyReduceArr ! rule) i tk st
-				     where rule = (I# ((negateInt# ((n +# (1# :: Int#))))))
+				     (happyReduceArr Happy_Data_Array.! rule) i tk st
+				     where rule = (Happy_GHC_Exts.I# ((Happy_GHC_Exts.negateInt# ((n Happy_GHC_Exts.+# (1# :: Happy_GHC_Exts.Int#))))))
 		n		  -> {- nothing -}
 
 
 				     happyShift new_state i tk st
-				     where new_state = (n -# (1# :: Int#))
+				     where new_state = (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#))
    where off    = indexShortOffAddr happyActOffsets st
-	 off_i  = (off +# i)
-	 check  = if (off_i >=# (0# :: Int#))
-			then (indexShortOffAddr happyCheck off_i ==#  i)
+	 off_i  = (off Happy_GHC_Exts.+# i)
+	 check  = if (off_i Happy_GHC_Exts.>=# (0# :: Happy_GHC_Exts.Int#))
+			then (indexShortOffAddr happyCheck off_i Happy_GHC_Exts.==#  i)
 			else False
  	 action | check     = indexShortOffAddr happyTable off_i
 		| otherwise = indexShortOffAddr happyDefActions st
@@ -1154,27 +1155,27 @@
 
 indexShortOffAddr (HappyA# arr) off =
 #if __GLASGOW_HASKELL__ > 500
-	narrow16Int# i
+	Happy_GHC_Exts.narrow16Int# i
 #elif __GLASGOW_HASKELL__ == 500
-	intToInt16# i
+	Happy_GHC_Exts.intToInt16# i
 #else
-	(i `iShiftL#` 16#) `iShiftRA#` 16#
+	Happy_GHC_Exts.iShiftRA# (Happy_GHC_Exts.iShiftL# i 16#) 16#
 #endif
   where
 #if __GLASGOW_HASKELL__ >= 503
-	i = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low)
+	i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.uncheckedShiftL# high 8#) low)
 #else
-	i = word2Int# ((high `shiftL#` 8#) `or#` low)
+	i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.shiftL# high 8#) low)
 #endif
-	high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))
-	low  = int2Word# (ord# (indexCharOffAddr# arr off'))
-	off' = off *# 2#
+	high = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr (off' Happy_GHC_Exts.+# 1#)))
+	low  = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr off'))
+	off' = off Happy_GHC_Exts.*# 2#
 
 
 
 
 
-data HappyAddr = HappyA# Addr#
+data HappyAddr = HappyA# Happy_GHC_Exts.Addr#
 
 
 
@@ -1188,7 +1189,7 @@
 -- Shifting a token
 
 happyShift new_state 0# tk st sts stk@(x `HappyStk` _) =
-     let i = (case unsafeCoerce# x of { (I# (i)) -> i }) in
+     let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in
 --     trace "shifting the error token" $
      happyDoAction i tk new_state (HappyCons (st) (sts)) (stk)
 
@@ -1223,7 +1224,7 @@
 happyReduce k i fn 0# tk st sts stk
      = happyFail 0# tk st sts stk
 happyReduce k nt fn j tk st sts stk
-     = case happyDrop (k -# (1# :: Int#)) sts of
+     = case happyDrop (k Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) sts of
 	 sts1@((HappyCons (st1@(action)) (_))) ->
         	let r = fn stk in  -- it doesn't hurt to always seq here...
        		happyDoSeq r (happyGoto nt j tk st1 sts1 r)
@@ -1243,17 +1244,17 @@
              drop_stk = happyDropStk k stk
 
              off    = indexShortOffAddr happyGotoOffsets st1
-             off_i  = (off +# nt)
+             off_i  = (off Happy_GHC_Exts.+# nt)
              new_state = indexShortOffAddr happyTable off_i
 
 
 
 
 happyDrop 0# l = l
-happyDrop n (HappyCons (_) (t)) = happyDrop (n -# (1# :: Int#)) t
+happyDrop n (HappyCons (_) (t)) = happyDrop (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) t
 
 happyDropStk 0# l = l
-happyDropStk n (x `HappyStk` xs) = happyDropStk (n -# (1#::Int#)) xs
+happyDropStk n (x `HappyStk` xs) = happyDropStk (n Happy_GHC_Exts.-# (1#::Happy_GHC_Exts.Int#)) xs
 
 -----------------------------------------------------------------------------
 -- Moving to a new state after a reduction
@@ -1263,7 +1264,7 @@
    {- nothing -}
    happyDoAction j tk new_state
    where off    = indexShortOffAddr happyGotoOffsets st
-	 off_i  = (off +# nt)
+	 off_i  = (off Happy_GHC_Exts.+# nt)
  	 new_state = indexShortOffAddr happyTable off_i
 
 
@@ -1292,7 +1293,7 @@
 --                       save the old token and carry on.
 happyFail  i tk (action) sts stk =
 --      trace "entering error recovery" $
-	happyDoAction 0# tk action sts ( (unsafeCoerce# (I# (i))) `HappyStk` stk)
+	happyDoAction 0# tk action sts ( (Happy_GHC_Exts.unsafeCoerce# (Happy_GHC_Exts.I# (i))) `HappyStk` stk)
 
 -- Internal happy errors:
 
@@ -1302,7 +1303,7 @@
 -- Hack to get the typechecker to accept our action functions
 
 
-happyTcHack :: Int# -> a -> a
+happyTcHack :: Happy_GHC_Exts.Int# -> a -> a
 happyTcHack x y = y
 {-# INLINE happyTcHack #-}
 
diff --git a/epic.cabal b/epic.cabal
--- a/epic.cabal
+++ b/epic.cabal
@@ -1,5 +1,5 @@
 Name:		epic
-Version:	0.1.3
+Version:	0.1.4
 Author:		Edwin Brady
 License:	BSD3
 License-file:	LICENSE
@@ -27,7 +27,7 @@
         Other-modules: Epic.Bytecode Epic.Parser Epic.Scopecheck
                        Epic.Language Epic.Lexer Epic.CodegenC
                        Epic.OTTLang Epic.Simplify Paths_epic
-        Build-depends:	base <=4 , haskell98, mtl, Cabal, array, directory
+        Build-depends:	base >=4 && <5 , haskell98, mtl, Cabal, array, directory
 
 
 Executable     epic
@@ -35,5 +35,5 @@
                Other-modules: Epic.Bytecode Epic.Parser Epic.Scopecheck
                               Epic.Language Epic.Lexer Epic.CodegenC
                               Epic.OTTLang Epic.Simplify Paths_epic
-               Build-depends:	base, haskell98, mtl, Cabal, array, directory
+               Build-depends:	base >=4 && <5, haskell98, mtl, Cabal, array, directory
 
diff --git a/evm/Makefile b/evm/Makefile
--- a/evm/Makefile
+++ b/evm/Makefile
@@ -1,6 +1,6 @@
 CC = gcc
-CFLAGS = -Wall -g
-#CFLAGS = -Wall -O3
+#CFLAGS = -Wall -g
+CFLAGS = -Wall -O3
 OBJS = closure.o stdfuns.o
 INSTALLDIR = ${PREFIX}/lib/evm
 
diff --git a/evm/libevm.a b/evm/libevm.a
Binary files a/evm/libevm.a and b/evm/libevm.a differ
