diff --git a/Test/Chuchu/Parser.hs b/Test/Chuchu/Parser.hs
--- a/Test/Chuchu/Parser.hs
+++ b/Test/Chuchu/Parser.hs
@@ -14,46 +14,39 @@
 -- base
 import Control.Applicative hiding ((<|>))
 import Control.Monad
-import GHC.Exts
 
 -- parsec
 import Text.Parsec
-import Text.Parsec.Text
 
 -- chuchu
+import Test.Chuchu.Types (ChuchuParser(..))
 import qualified Test.Chuchu.Parsec as P
 import Test.Chuchu.Email
 
-instance IsString (Parser a) where
-  fromString s
-    = void (string s)
-      >> return
-        (error $ "The return value of string parsers should not be used")
-
 -- | Parses a floating point number, with the same syntax as accepted by
 -- Haskell.
-number :: Parser Double
-number = nofToDouble <$> P.natFloat
+number :: ChuchuParser Double
+number = ChuchuParser $ nofToDouble <$> P.natFloat
 
 nofToDouble :: Either Integer Double -> Double
 nofToDouble (Left i) = fromInteger i
 nofToDouble (Right d) = d
 
 -- | Parses an integer.
-int :: Parser Integer
-int = P.int
+int :: ChuchuParser Integer
+int = ChuchuParser P.int
 
 -- | Parses a quoted string, with the same syntax as accepted by Haskell.
-text :: Parser String
-text = P.stringLiteral
+text :: ChuchuParser String
+text = ChuchuParser P.stringLiteral
 
 -- | Parses anything until the string passed as parameter, and also the string.
-wildcard :: String -> Parser ()
-wildcard = void . manyTill anyChar . string
+wildcard :: String -> ChuchuParser ()
+wildcard = ChuchuParser . void . manyTill anyChar . string
 
 -- | Parses a simplified e-mail address and return everything that was parsed as
 -- a simple 'String'.  This is a very simplified parser for e-mail, which does
 -- not follow RFC5322. Basically, it parses @TEXT\@TEXT@, where TEXT is
 -- @alphaNum \<|> oneOf \"!#$%&\'*+-\/=?^_\`{|}~.\"@.
-email :: Parser String
-email = addrSpecSimple
+email :: ChuchuParser String
+email = ChuchuParser addrSpecSimple
diff --git a/Test/Chuchu/Types.hs b/Test/Chuchu/Types.hs
--- a/Test/Chuchu/Types.hs
+++ b/Test/Chuchu/Types.hs
@@ -5,19 +5,32 @@
 --
 -- Maintainer  :  Marco Túlio Pimenta Gontijo <marcotmarcot@gmail.com>
 -- Stability   :  unstable
--- Portability :  non-portable (GADTs)
+-- Portability :  non-portable (GADTs, GeneralizedNewtypeDeriving)
 module
   Test.Chuchu.Types
-  (Chuchu, ChuchuM (Given, When, Then, And, But), runChuchu)
+  (ChuchuParser (..), Chuchu, ChuchuM (Given, When, Then, And, But), runChuchu)
   where
 
 -- base
 import Control.Applicative hiding ((<|>))
+import GHC.Exts
 
 -- parsec
 import Text.Parsec
 import Text.Parsec.Text
 
+
+-- | @newtype@ for Parsec's 'Parser' used on this library.  The
+-- main reason for not using 'Parser' directly is to be able to
+-- define the 'IsString' instance.
+newtype ChuchuParser a
+  = ChuchuParser (Parser a) deriving (Functor, Applicative, Monad)
+
+instance IsString (ChuchuParser a) where
+  fromString s = ChuchuParser (string s >> return err)
+    where err = error "fromString: ChuchuParser strings do not return any useful value."
+
+
 -- | The most command use case where the return value of the Monad is ignored.
 type Chuchu m  = ChuchuM m ()
 
@@ -26,11 +39,11 @@
 -- of them receive a parser and an action to run if the parser finishes
 -- correctly.
 data ChuchuM m a where
-  Given :: Parser a -> (a -> m ()) -> ChuchuM m ()
-  When :: Parser a -> (a -> m ()) -> ChuchuM m ()
-  Then :: Parser a -> (a -> m ()) -> ChuchuM m ()
-  And :: Parser a -> (a -> m ()) -> ChuchuM m ()
-  But :: Parser a -> (a -> m ()) -> ChuchuM m ()
+  Given :: ChuchuParser a -> (a -> m ()) -> ChuchuM m ()
+  When :: ChuchuParser a -> (a -> m ()) -> ChuchuM m ()
+  Then :: ChuchuParser a -> (a -> m ()) -> ChuchuM m ()
+  And :: ChuchuParser a -> (a -> m ()) -> ChuchuM m ()
+  But :: ChuchuParser a -> (a -> m ()) -> ChuchuM m ()
   Nil :: ChuchuM m a
   Cons :: ChuchuM m b -> ChuchuM m a -> ChuchuM m a
 
@@ -50,5 +63,5 @@
 runChuchu (And p f) = apply p f
 runChuchu (But p f) = apply p f
 
-apply :: Parser a -> (a -> m ()) -> Parser (m ())
-apply p f = try $ f <$> p <* eof
+apply :: ChuchuParser a -> (a -> m ()) -> Parser (m ())
+apply (ChuchuParser p) f = try $ f <$> p <* eof
diff --git a/chuchu.cabal b/chuchu.cabal
--- a/chuchu.cabal
+++ b/chuchu.cabal
@@ -1,5 +1,5 @@
 name: chuchu
-version: 0.0.0.1
+version: 0.1.0.0
 cabal-version: >= 1.8
 build-type: Simple
 license: OtherLicense
@@ -37,7 +37,7 @@
     parsec >= 3.1 && < 3.2,
     cmdargs >= 0.9 && < 0.10,
     abacate >= 0.0 && < 0.1
-  extensions: DeriveDataTypeable, TypeSynonymInstances, FlexibleInstances, GADTs
+  extensions: DeriveDataTypeable, GADTs, GeneralizedNewtypeDeriving
   ghc-options: -Wall
 
 Test-Suite environment
