diff --git a/Language/SSVM/Binary.hs b/Language/SSVM/Binary.hs
--- a/Language/SSVM/Binary.hs
+++ b/Language/SSVM/Binary.hs
@@ -3,7 +3,6 @@
   (dumpCode, loadCode)
   where
 
-import Control.Applicative
 import Control.Monad (forM_)
 import qualified Control.Monad.State as S
 import Data.BinaryState
diff --git a/Language/SSVM/Types.hs b/Language/SSVM/Types.hs
--- a/Language/SSVM/Types.hs
+++ b/Language/SSVM/Types.hs
@@ -3,7 +3,6 @@
 
 import Control.Monad.State
 import Data.Data
-import Data.Monoid
 import Data.Array
 import qualified Data.Map as M
 
@@ -65,12 +64,15 @@
   cCode :: [StackItem] }
   deriving (Eq, Show, Data, Typeable)
 
-instance Monoid Code where
-  mempty = Code [M.empty] []
-  mappend (Code l1 c1) (Code l2 c2) = Code (M.union m1 m2: ms) (c1 ++ c2)
+instance Semigroup Code where
+  (Code l1 c1) <> (Code l2 c2) = Code (M.union m1 m2: ms) (c1 ++ c2)
     where
       (m1:ms) = l1
       (m2:_)  = l2
+
+instance Monoid Code where
+  mempty = Code [M.empty] []
+  mappend = (<>)
 
 class (Data a, Typeable a) => StackType a where
   toStack :: a -> StackItem
diff --git a/simple-stacked-vm.cabal b/simple-stacked-vm.cabal
--- a/simple-stacked-vm.cabal
+++ b/simple-stacked-vm.cabal
@@ -1,5 +1,5 @@
 Name:           simple-stacked-vm
-Version:        0.1.1
+Version:        0.1.2
 Cabal-Version:  >= 1.6
 License:        BSD3
 License-File:   LICENSE
@@ -21,13 +21,18 @@
                    Language.SSVM.Interpreter
                    Language.SSVM.Binary
 
-  Build-Depends:  base >= 3 && <= 5, containers,
+  Build-Depends:  base >= 4.9 && <= 5, containers,
                   mtl > 1, filepath, parsec >= 3,
                   binary-state, array
 
   ghc-options: -fwarn-unused-imports
 
 executable ssvm
+  Other-Modules: Language.SSVM.Types
+                   Language.SSVM.Parser
+                   Language.SSVM.Operations
+                   Language.SSVM.Interpreter
+                   Language.SSVM.Binary
   Main-is: ssvm.hs
 
 
