diff --git a/postgresql-libpq.cabal b/postgresql-libpq.cabal
--- a/postgresql-libpq.cabal
+++ b/postgresql-libpq.cabal
@@ -1,5 +1,5 @@
 Name:                postgresql-libpq
-Version:             0.8.2.5
+Version:             0.8.2.6
 Synopsis:            low-level binding to libpq
 
 Description:         This is a binding to libpq: the C application
@@ -42,4 +42,4 @@
 source-repository this
   type:     git
   location: http://github.com/lpsmith/postgresql-libpq
-  tag:      v0.8.2.5
+  tag:      v0.8.2.6
diff --git a/src/Database/PostgreSQL/LibPQ.hsc b/src/Database/PostgreSQL/LibPQ.hsc
--- a/src/Database/PostgreSQL/LibPQ.hsc
+++ b/src/Database/PostgreSQL/LibPQ.hsc
@@ -1288,7 +1288,7 @@
         else do cstr <- c_PQgetvalue ptr rowNum colNum
                 l <- c_PQgetlength ptr rowNum colNum
                 fp' <- FC.newForeignPtr (castPtr cstr) finalizer
-                return $ Just $ B.fromForeignPtr fp' 0 $ fromIntegral l
+                return $! Just $! B.fromForeignPtr fp' 0 $ fromIntegral l
 
     where
       finalizer = touchForeignPtr fp
@@ -1441,7 +1441,7 @@
                 then return Nothing
                 else do tofp <- newForeignPtr p_PQfreemem to
                         l <- peek to_length
-                        return $ Just $ B.fromForeignPtr tofp 0 ((fromIntegral l) - 1)
+                        return $! Just $! B.fromForeignPtr tofp 0 ((fromIntegral l) - 1)
 
 
 -- | Converts a 'ByteString' representation of binary data into binary
@@ -1469,7 +1469,7 @@
             then return Nothing
             else do tofp <- newForeignPtr p_PQfreemem to
                     l <- peek to_length
-                    return $ Just $ B.fromForeignPtr tofp 0 $ fromIntegral l
+                    return $! Just $! B.fromForeignPtr tofp 0 $ fromIntegral l
 
 
 -- $copy
@@ -1847,7 +1847,7 @@
 
              _ -> do l <- fromIntegral `fmap` B.c_strlen errbuf
                      fp' <- newForeignPtr finalizerFree $ castPtr errbuf
-                     return $ Left $ B.fromForeignPtr fp' 0 l
+                     return $! Left $! B.fromForeignPtr fp' 0 l
 
     where
       errbufsize = 256
@@ -2038,7 +2038,7 @@
              then return Nothing
              else do l <- fromIntegral `fmap` B.c_strlen cstr
                      fp' <- FC.newForeignPtr (castPtr cstr) finalizer
-                     return $ Just $ B.fromForeignPtr fp' 0 l
+                     return $! Just $! B.fromForeignPtr fp' 0 l
     where
       finalizer = touchForeignPtr fp
 
@@ -2210,7 +2210,7 @@
           else do
                   bufre <- reallocBytes buf len
                   buffp <- newForeignPtr finalizerFree bufre
-                  return (Just (B.fromForeignPtr buffp 0 len))
+                  return $! Just $! B.fromForeignPtr buffp 0 len
 
 -- | Changes the current read or write location associated with
 -- a large object descriptor.    The return value is the new location
@@ -2224,7 +2224,7 @@
                                      AbsoluteSeek -> #const SEEK_SET
                                      RelativeSeek -> #const SEEK_CUR
                                      SeekFromEnd  -> #const SEEK_END
-        return (nonnegInt pos)
+        return $! nonnegInt pos
 
 -- | Obtains the current read or write location of a large object descriptor.
 
