diff --git a/src/Database/TypedQuery/SQLParser.hs b/src/Database/TypedQuery/SQLParser.hs
--- a/src/Database/TypedQuery/SQLParser.hs
+++ b/src/Database/TypedQuery/SQLParser.hs
@@ -22,7 +22,14 @@
 --import Control.Arrow (first)
 
 import Control.Monad -- (void, foldM_)
-import Data.Monoid (Monoid (..))
+
+#if !(MIN_VERSION_base(4,8,0))
+import Data.Monoid (Monoid(..))
+#endif
+#if !(MIN_VERSION_base(4,11,0))
+import Data.Semigroup (Semigroup(..))
+#endif
+
 import qualified Language.Haskell.TH.Syntax as TH
 
 import Data.Maybe
@@ -149,10 +156,12 @@
 addJISU :: String -> WParser ()
 addJISU s  = addW $ mempty   { inTypeV = [TAInSupply s]}
 
+instance Semigroup SQLWriter where
+  SQLWriter a1 a2 a3 a4 a5 <> SQLWriter b1 b2 b3 b4 b5
+        = SQLWriter (mappend a1 b1) (mappend a2 b2) (mappend a3 b3) (mappend a4 b4) (mappend a5 b5)
+
 instance Monoid SQLWriter where
   mempty = SQLWriter mempty mempty mempty mempty mempty
-  SQLWriter a1 a2 a3 a4 a5 `mappend` SQLWriter b1 b2 b3 b4 b5
-        = SQLWriter (mappend a1 b1) (mappend a2 b2) (mappend a3 b3) (mappend a4 b4) (mappend a5 b5)
 
 typedSQLtoSQL :: String -> Maybe (String, [Text], [TypeAction], [TypeAction], [TypeAction])
 -- ^ takes some annotates string and gives its parsed representation
@@ -578,6 +587,9 @@
 parseInsert = do
              whiteSpace sql
              greserved "INSERT"
+             optional $ do
+               greserved "OR"
+               greserved "IGNORE"
              greserved "INTO"
              addQ =<< identifier3
              addQ =<< braketS <$> fields
diff --git a/src/Database/TypedQuery/Types.hs b/src/Database/TypedQuery/Types.hs
--- a/src/Database/TypedQuery/Types.hs
+++ b/src/Database/TypedQuery/Types.hs
@@ -7,22 +7,29 @@
 {-# OPTIONS_GHC -fno-warn-orphans  #-}
 
 module Database.TypedQuery.Types
-( TypedQuery (..)
-, TypeAction (..)
-, RunDB (..)
-, jsonPair
-, convAction
-, typeTuple
-, typeTupleIn
-, vanilaQuery
-, genUncurry
-, genJsonQuery
-, genTypedQuery
-)
+  ( TypedQuery (..)
+  , TypeAction (..)
+  , RunDB (..)
+  , jsonPair
+  , convAction
+  , typeTuple
+  , typeTupleIn
+  , vanilaQuery
+  , genUncurry
+  , genJsonQuery
+  , genTypedQuery
+  )
 where
 
 import Control.Arrow (first)
+
+#if !(MIN_VERSION_base(4,8,0))
 import Data.Monoid (Monoid(..))
+#endif
+#if !(MIN_VERSION_base(4,11,0))
+import Data.Semigroup (Semigroup(..))
+#endif
+
 import Data.String (IsString(..))
 import Data.Typeable (Typeable)
 
@@ -52,6 +59,7 @@
 import Data.String.QM
 
 codeFormat = id
+-- currently there is some parese error in the following section
 codeFormat' =  check . fmap reformat . parseStmtWithMode defaultParseMode {
   extensions
     = [ EnableExtension BangPatterns
@@ -114,16 +122,18 @@
        Nothing -> mempty
        Just (a, b, c, d, e)    -> TypedQuery (fromString a) b c d e
 
-instance (RunDB q, Monoid q) => Monoid (TypedQuery q) where
-    mempty = TypedQuery mempty mempty mempty mempty mempty
-    TypedQuery a1 a2 a3 a4 a5 `mappend` TypedQuery b1 b2 b3 b4 b5 
+
+instance (RunDB q, Monoid q) => Semigroup (TypedQuery q) where
+    TypedQuery a1 a2 a3 a4 a5 <> TypedQuery b1 b2 b3 b4 b5 
         = TypedQuery
             (mappend a1 b1)
             (mappend a2 b2)
             (mappend a3 b3)
             (mappend a4 b4)
             (mappend a5 b5)
-    {-# INLINE mappend #-}
+
+instance (RunDB q, Monoid q) => Monoid (TypedQuery q) where
+    mempty = TypedQuery mempty mempty mempty mempty mempty
 
 convAction :: RunDB q => q -> TypeAction -> TH.Exp -> TH.Exp
 convAction _ (TAUnknown) = id
diff --git a/typedquery.cabal b/typedquery.cabal
--- a/typedquery.cabal
+++ b/typedquery.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                typedquery
-version:             0.1.0.3
+version:             0.1.1
 synopsis:            Parser for SQL augmented with types
 description:         Base package for parsing queries
 homepage:            https://github.com/tolysz/typedquery
