diff --git a/Control/Concurrent/SCC/Primitives.hs b/Control/Concurrent/SCC/Primitives.hs
--- a/Control/Concurrent/SCC/Primitives.hs
+++ b/Control/Concurrent/SCC/Primitives.hs
@@ -63,7 +63,7 @@
 import Data.Text.IO (getLine, hGetLine, hPutStr, putStr)
 
 import Data.Monoid.Null (MonoidNull(null))
-import Data.Monoid.Cancellative (LeftReductiveMonoid (stripPrefix))
+import Data.Monoid.Cancellative (LeftReductiveMonoid, stripPrefix)
 import Data.Monoid.Factorial (FactorialMonoid(splitPrimePrefix), length)
 import Text.ParserCombinators.Incremental (string, takeWhile, (<<|>))
 
diff --git a/Control/Concurrent/SCC/XML.hs b/Control/Concurrent/SCC/XML.hs
--- a/Control/Concurrent/SCC/XML.hs
+++ b/Control/Concurrent/SCC/XML.hs
@@ -76,15 +76,18 @@
 
 newtype XMLStream = XMLStream {chunk :: [Markup XMLToken Text]} deriving (Show)
 
-instance Monoid XMLStream where
-   mempty = XMLStream []
-   l `mappend` XMLStream [] = l
-   XMLStream [] `mappend` r = r
-   XMLStream l `mappend` XMLStream r@((Content rc):rt) =
+instance Semigroup XMLStream where
+   l <> XMLStream [] = l
+   XMLStream [] <> r = r
+   XMLStream l <> XMLStream r@((Content rc):rt) =
       case last l
-      of Content lc -> XMLStream (init l ++ Content (mappend lc rc) : rt)
+      of Content lc -> XMLStream (init l ++ Content (lc <> rc) : rt)
          _ -> XMLStream (l ++ r)
-   XMLStream l `mappend` XMLStream r = XMLStream (l ++ r)
+   XMLStream l <> XMLStream r = XMLStream (l ++ r)
+
+instance Monoid XMLStream where
+   mempty = XMLStream []
+   mappend = (<>)
 
 xmlParser :: LeftBiasedLocal.Parser Text XMLStream
 xmlParser = concatMany (xmlContent <|> xmlMarkup)
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,38 @@
+
+## Installation
+
+If you have Cabal-Install installed, the following two commands should install the latest SCC package on your system:
+
+    cabal update
+    cabal install scc
+
+If everything goes well, there should be executable named `shsh`. On Unix it gets installed in your `$HOME/.cabal/bin/` directory by default.
+
+## Command-line Shell
+
+To see the options supported by _shsh_, type `shsh --help` and you'll get:
+
+    Usage: shsh (-c <command> | -f <file> | -i | -s) 
+      -c       --command      Execute a single command
+      -h       --help         Show help
+      -f file  --file=file    Execute commands from a script file
+      -i       --interactive  Execute commands interactively
+      -s       --stdin        Execute commands from the standard input
+
+Here are a few simple command examples:
+
+<table>
+<tr><th> Bash + GNU tools</th><th>shsh</th></tr>
+<tr><td>`echo "Hello, World!"`</td><td>`echo "Hello, World!\n"`</td></tr>
+<tr><td>`wc -c`</td><td>`count | show | concatenate`</td></tr>
+<tr><td>`wc -l`</td><td>`foreach line then substitute x else suppress end | count | show | concatenate`</td></tr>
+<tr><td>`grep "foo"`</td><td>`foreach line having substring "foo" then append "\n" else suppress end`</td></tr>
+<tr><td>`sed "s:foo:bar:"`</td><td>`foreach substring "foo" then substitute "bar" end`</td></tr>
+<tr><td>`sed "s:foo:[\\&]:"`</td><td>`foreach substring "foo" then prepend "[" | append "]" end`</td></tr>
+<tr><td>`sed "s:foo:[\\&, \\&]:"`</td><td>`foreach substring "foo" then id; echo ", "; id end`</td></tr>
+</table>
+
+## Using the framework from Haskell
+
+The shell interface is basically only syntax on top of the underlying EDSL (embedded domain-specific language) in Haskell. If you require anything more than stringing together of existing components using existing combinators, you'll need to write Haskell code.
+
diff --git a/Shell.hs b/Shell.hs
--- a/Shell.hs
+++ b/Shell.hs
@@ -475,8 +475,8 @@
 showHelp = putStrLn (usageInfo usageSyntax flagList)
 
 interact :: Flags -> InputT IO ()
-interact options = do Just command <- getInputLine "> "
-                      finish <- lift $ interpret options command
+interact options = do command <- getInputLine "> "
+                      finish <- maybe (pure False) (lift . interpret options) command
                       when (not finish) (interact options)
 
 interpret :: Flags -> String -> IO Bool
diff --git a/scc.cabal b/scc.cabal
--- a/scc.cabal
+++ b/scc.cabal
@@ -1,5 +1,5 @@
 Name:                scc
-Version:             0.8.2.4
+Version:             0.8.3
 Cabal-Version:       >= 1.10
 Build-Type:          Simple
 Synopsis:            Streaming component combinators
@@ -19,12 +19,12 @@
 License-file:        LICENSE.txt
 Copyright:           (c) 2008-2016 Mario Blazevic
 Author:              Mario Blazevic
-Maintainer:          blamario@yahoo.com
-Homepage:            http://trac.haskell.org/SCC/
-Extra-source-files:  grammar.bnf Makefile
+Maintainer:          blamario@protonmail.com
+Homepage:            https://hub.darcs.net/blamario/SCC.wiki
+Extra-source-files:  grammar.bnf, Makefile, README.md
 Source-repository head
   type:              darcs
-  location:          http://code.haskell.org/SCC/
+  location:          https://hub.darcs.net/blamario/SCC
 
 Executable shsh
   Main-is:           Shell.hs
@@ -33,7 +33,7 @@
                      Control.Concurrent.Configuration, Control.Concurrent.SCC.Configurable
   Build-Depends:     base < 5, containers,
                      transformers >= 0.2 && < 0.6, transformers-compat >= 0.3 && < 0.6, bytestring < 1.0, text < 1.3,
-                     monoid-subclasses >= 0.2 && < 0.5, incremental-parser >= 0.2.2 && < 0.3,
+                     monoid-subclasses >= 0.2 && < 1.1, incremental-parser >= 0.2.2 && < 0.4,
                      monad-parallel, monad-coroutine == 0.9.*,
                      process, haskeline, parsec == 3.*
   GHC-options:       -threaded
@@ -50,10 +50,10 @@
                      Control.Concurrent.Configuration, Control.Concurrent.SCC.Configurable
   Build-Depends:     base < 5, containers,
                      transformers >= 0.2 && < 0.6, transformers-compat >= 0.3 && < 0.6, bytestring < 1.0, text < 1.3,
-                     monoid-subclasses >= 0.2 && < 0.5, incremental-parser >= 0.2.2 && < 0.3,
+                     monoid-subclasses >= 0.2 && < 1.1, incremental-parser >= 0.2.2 && < 0.4,
                      monad-parallel, monad-coroutine == 0.9.*,
                      QuickCheck >= 2 && < 3, test-framework >= 0.4.1, test-framework-quickcheck2
-  GHC-options:       -threaded -fcontext-stack=30
+  GHC-options:       -threaded -freduction-depth=30
   if impl(ghc >= 7.0.0)
      default-language: Haskell2010
 
@@ -66,7 +66,7 @@
                      Control.Concurrent.SCC.Combinators, Control.Concurrent.SCC.Primitives, Control.Concurrent.SCC.XML
   Build-Depends:     base < 5, containers,
                      transformers >= 0.2 && < 0.6, transformers-compat >= 0.3 && < 0.6, bytestring < 1.0, text < 1.3,
-                     monoid-subclasses >= 0.2 && < 0.5, incremental-parser >= 0.2.2 && < 0.3,
+                     monoid-subclasses >= 0.2 && < 1.1, incremental-parser >= 0.2.2 && < 0.4,
                      monad-parallel, monad-coroutine == 0.9.*
   if impl(ghc >= 7.0.0)
      default-language: Haskell2010
