@@ -133,10 +133,10 @@ import Data.ByteString (ByteString)
133133import Data.Int (Int64)
134134import qualified Data.IntMap as IntMap
135135import Data.List (intersperse)
136−import Data.Monoid (mappend, mconcat)
136+import Data.Monoid (mconcat)
137137import Data.Typeable (Typeable)
138138import Database.PostgreSQL.Simple.BuiltinTypes ( oid2typname )
139−import Database.PostgreSQL.Simple.Compat ( mask )
139+import Database.PostgreSQL.Simple.Compat ( mask, (<>) )
140140import Database.PostgreSQL.Simple.FromField (ResultError(..))
141141import Database.PostgreSQL.Simple.FromRow (FromRow(..))
142142import Database.PostgreSQL.Simple.Ok
@@ -325,7 +325,7 @@ buildQuery conn q template xs = zipParams (split template) <$> mapM sub xs
325325 sub (Many ys) = mconcat <$> mapM sub ys
326326 split s = fromByteString h : if B.null t then [] else split (B.tail t)
327327 where (h,t) = B.break (=='?') s
328− zipParams (t:ts) (p:ps) = t `mappend` p `mappend` zipParams ts ps
328+ zipParams (t:ts) (p:ps) = t <> p <> zipParams ts ps
329329 zipParams [t] [] = t
330330 zipParams _ _ = fmtError (show (B.count '?' template) ++
331331 " '?' characters, but " ++
@@ -499,8 +499,7 @@ doFold FoldOptions{..} conn _template q a f = do
499499 where
500500 go = do
501501 -- FIXME: what about name clashes with already-declared cursors?
502− _ <- execute_ conn ("DECLARE fold NO SCROLL CURSOR FOR "
503− `mappend` q)
502+ _ <- execute_ conn ("DECLARE fold NO SCROLL CURSOR FOR " <> q)
504503 loop a `finally` execute_ conn "CLOSE fold"
505504
506505-- FIXME: choose the Automatic chunkSize more intelligently