diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,4 +1,41 @@
 regex-applicative
 =================
 
-*regex-applicative* is a Haskell library for parsing using regular expressions.
+*regex-applicative* is aimed to be an efficient and easy to use parsing combinator
+library for Haskell based on regular expressions.
+
+Perl programmers often use regular expressions for parsing, even if it is not
+an appropriate tool for the job, because Perl has so good support for regexps.
+
+The opposite seems to be valid about Haskell programmers -- they use parsing
+combinators (which recognize context-free or even context-sensitive grammars),
+even when the language is actually regular!
+
+Hopefully, this library will improve the situation.
+
+Installation
+------------
+Install this library using `cabal-install` tool:
+
+    cabal update
+    cabal install regex-applicative
+
+Documentation
+-------------
+The [API reference][haddock] is available from Hackage
+
+Other resources
+---------------
+
+* [This package on Hackage][hackage]
+* [Issue tracker][issues]
+* [Repository][github]
+* ["A Play on Regular Expressions"][play] paper explains, to some extent,
+      how this works
+
+
+[haddock]: http://hackage.haskell.org/packages/archive/regex-applicative/latest/doc/html/Text-Regex-Applicative.html
+[hackage]: http://hackage.haskell.org/package/regex-applicative
+[issues]: https://github.com/feuerbach/regex-applicative/issues
+[github]: https://github.com/feuerbach/regex-applicative
+[play]: http://sebfisch.github.com/haskell-regexp/regexp-play.pdf
diff --git a/Text/Regex/Applicative/Implementation.hs b/Text/Regex/Applicative/Implementation.hs
--- a/Text/Regex/Applicative/Implementation.hs
+++ b/Text/Regex/Applicative/Implementation.hs
@@ -8,7 +8,7 @@
 -- | An applicative functor similar to Maybe, but it's '<|>' method honors
 -- priority.
 data Priority a = Priority { priority :: !PrSeq, pValue :: a } | Fail
-    deriving Functor
+    deriving (Functor, Show)
 type PrSeq = Sequence.Seq PrNum
 type PrNum = Int
 
diff --git a/Text/Regex/Applicative/Interface.hs b/Text/Regex/Applicative/Interface.hs
--- a/Text/Regex/Applicative/Interface.hs
+++ b/Text/Regex/Applicative/Interface.hs
@@ -36,20 +36,10 @@
 
 instance Applicative (RE s) where
     pure x = const x <$> RE epsNode
-    (RE a1) <*> (RE a2) = RE $ RegexpNode
-        { active = False
-        , empty = empty a1 <*> empty a2
-        , final_ = zero
-        , reg = App a1 a2
-        }
+    (RE a1) <*> (RE a2) = RE $ appNode a1 a2
 
 instance Alternative (RE s) where
-    (RE a1) <|> (RE a2) = RE $ RegexpNode
-        { active = False
-        , empty = empty a1 `emptyChoice` empty a2
-        , final_ = zero
-        , reg = Alt a1 a2
-        }
+    (RE a1) <|> (RE a2) = RE $ altNode a1 a2
     empty = error "noMatch" <$> psym (const False)
     many a = reverse <$> reFoldl (flip (:)) [] a
 
@@ -72,12 +62,7 @@
 -- | Greedily matches zero or more symbols, which are combined using the given
 -- folding function
 reFoldl :: (b -> a -> b) -> b -> RE s a -> RE s b
-reFoldl f b (RE a) = RE $ RegexpNode
-    { active = False
-    , empty = pure b
-    , final_ = zero
-    , reg = Rep f b a
-    }
+reFoldl f b (RE a) = RE $ repNode f b a
 
 -- | Attempts to match a string of symbols against the regular expression
 (=~) :: [s] -> RE s a -> Maybe a
diff --git a/regex-applicative.cabal b/regex-applicative.cabal
--- a/regex-applicative.cabal
+++ b/regex-applicative.cabal
@@ -7,7 +7,7 @@
 -- The package version. See the Haskell package versioning policy
 -- (http://www.haskell.org/haskellwiki/Package_versioning_policy) for
 -- standards guiding when and how versions should be incremented.
-Version:             0.1
+Version:             0.1.1
 
 -- A short (one-line) description of the package.
 Synopsis:            Regex-based parsing with applicative interface
@@ -70,3 +70,4 @@
   -- Extra tools (e.g. alex, hsc2hs, ...) needed to build the source.
   -- Build-tools:         
   
+  GHC-Options:     -Wall -fno-warn-name-shadowing -fno-warn-missing-signatures
diff --git a/test.hs b/test.hs
--- a/test.hs
+++ b/test.hs
@@ -58,6 +58,7 @@
         many ((,,,) <$> many_A_or_B <*> sym 'c' <*> many_A_or_B <*> sym 'c') <*>
         many_A_or_B
 
+re8 = (,) <$> many (sym 'a' <|> sym 'b') <*> many (sym 'b' <|> sym 'c')
 
 prop re f (map f -> s) = reference re s == s =~ re
 
@@ -69,6 +70,7 @@
    , depthCheck 10 $ prop re5 a
    , depthCheck 10 $ prop re6 a
    , depthCheck 7  $ prop re7 abc
+   , depthCheck 7  $ prop re8 abc
    ]
 
 main = do
