diff --git a/bench/Bench.hs b/bench/Bench.hs
--- a/bench/Bench.hs
+++ b/bench/Bench.hs
@@ -1,11 +1,12 @@
 module Main where
 
-import Criterion.Main
-import Brainheck
-import qualified Data.Text.IO as TIO
+import           Brainheck
+import           Criterion.Main
+import qualified Data.Text.IO   as TIO
 
 -- FIXME use nfIO for final result + use env correctly
-main = TIO.readFile "bf/helloworld.bf" >>= \file -> defaultMain [ 
-    bgroup "parseBrainheck" [ 
-        bench "helloworld.bf" $ whnf (parseBrainheck "bf/helloworld.bf") file ] 
+main :: IO ()
+main = TIO.readFile "bf/helloworld.bf" >>= \file -> defaultMain [
+    bgroup "parseBrainheck" [
+        bench "helloworld.bf" $ whnf (parseBrainheck "bf/helloworld.bf") file ]
     ]
diff --git a/brainheck.cabal b/brainheck.cabal
--- a/brainheck.cabal
+++ b/brainheck.cabal
@@ -1,6 +1,6 @@
 cabal-version: 1.18
 name: brainheck
-version: 0.1.0.7
+version: 0.1.0.8
 license: BSD3
 license-file: LICENSE
 copyright: Copyright: (c) 2016-2018 Vanessa McHale
@@ -38,9 +38,10 @@
     default-language: Haskell2010
     default-extensions: DeriveFunctor DeriveFoldable DeriveTraversable
                         TypeFamilies
+    other-extensions: TemplateHaskell KindSignatures FlexibleContexts
     ghc-options: -Wall
     build-depends:
-        base >=4.11 && <5,
+        base >=4.10 && <5,
         mtl -any,
         vector -any,
         recursion-schemes -any,
@@ -63,7 +64,7 @@
     default-language: Haskell2010
     ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall
     build-depends:
-        base -any,
+        base >=4.11,
         brainheck -any,
         optparse-applicative -any,
         text -any
diff --git a/src/Brainheck.hs b/src/Brainheck.hs
--- a/src/Brainheck.hs
+++ b/src/Brainheck.hs
@@ -30,7 +30,7 @@
 -- | Syntax tree for brainfuck
 data Syntax a = Loop (Syntax a)
               | Seq [Syntax a]
-              | Token a deriving (Show)
+              | Token a
 
 makeBaseFunctor ''Syntax
 
@@ -56,7 +56,7 @@
 
 algebra :: Base (Syntax Char) (St ()) -> St ()
 algebra (TokenF x) = toAction x
-algebra (SeqF x) = foldr (>>) (pure ()) x
+algebra (SeqF x) = sequence_ x
 algebra l@(LoopF x) = check >>= (\bool -> if bool then pure () else x >> algebra l)
     where check = get >>= (\(arr,i) -> pure . (==0) . (V.! i) $ arr)
 
