diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,7 @@
+## 1.1.7
+
+* Canonicalise Monad instances [#237](https://github.com/snoyberg/conduit/pull/237)
+
 ## 1.1.6
 
 * Safe/Trustworthy for resourcet [#220](https://github.com/snoyberg/conduit/pull/220)
diff --git a/Control/Monad/Trans/Resource.hs b/Control/Monad/Trans/Resource.hs
--- a/Control/Monad/Trans/Resource.hs
+++ b/Control/Monad/Trans/Resource.hs
@@ -10,9 +10,7 @@
 #if __GLASGOW_HASKELL__ >= 704
 {-# LANGUAGE ConstraintKinds #-}
 #endif
-#if __GLASGOW_HASKELL__ >= 707
 {-# LANGUAGE Safe #-}
-#endif
 -- | Allocate resources which are guaranteed to be released.
 --
 -- For more information, see <https://www.fpcomplete.com/user/snoyberg/library-documentation/resourcet>.
diff --git a/Control/Monad/Trans/Resource/Internal.hs b/Control/Monad/Trans/Resource/Internal.hs
--- a/Control/Monad/Trans/Resource/Internal.hs
+++ b/Control/Monad/Trans/Resource/Internal.hs
@@ -7,10 +7,12 @@
 {-# LANGUAGE TypeFamilies #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE RankNTypes #-}
--- Can only turn on SafeHaskell when using a newer GHC, otherwise we get build
+-- Can only mark as Safe when using a newer GHC, otherwise we get build
 -- failures due to the manual Typeable instance below.
 #if __GLASGOW_HASKELL__ >= 707
 {-# LANGUAGE Safe #-}
+#else
+{-# LANGUAGE Trustworthy #-}
 #endif
 
 module Control.Monad.Trans.Resource.Internal(
@@ -237,7 +239,9 @@
     (ResourceT mf) `mplus` (ResourceT ma) = ResourceT $ \r -> mf r `mplus` ma r
 
 instance Monad m => Monad (ResourceT m) where
+#if !MIN_VERSION_base(4,8,0)
     return = ResourceT . const . return
+#endif
     ResourceT ma >>= f = ResourceT $ \r -> do
         a <- ma r
         let ResourceT f' = f a
diff --git a/Data/Acquire.hs b/Data/Acquire.hs
--- a/Data/Acquire.hs
+++ b/Data/Acquire.hs
@@ -1,7 +1,5 @@
 {-# LANGUAGE CPP #-}
-#if __GLASGOW_HASKELL__ >= 707
 {-# LANGUAGE Safe #-}
-#endif
 -- | This was previously known as the Resource monad. However, that term is
 -- confusing next to the ResourceT transformer, so it has been renamed.
 module Data.Acquire
diff --git a/Data/Acquire/Internal.hs b/Data/Acquire/Internal.hs
--- a/Data/Acquire/Internal.hs
+++ b/Data/Acquire/Internal.hs
@@ -53,11 +53,11 @@
 instance Functor Acquire where
     fmap = liftM
 instance Applicative Acquire where
-    pure = return
+    pure a = Acquire (\_ -> return (Allocated a (const $ return ())))
     (<*>) = ap
 
 instance Monad Acquire where
-    return a = Acquire (\_ -> return (Allocated a (const $ return ())))
+    return = pure
     Acquire f >>= g' = Acquire $ \restore -> do
         Allocated x free1 <- f restore
         let Acquire g = g' x
diff --git a/resourcet.cabal b/resourcet.cabal
--- a/resourcet.cabal
+++ b/resourcet.cabal
@@ -1,5 +1,5 @@
 Name:                resourcet
-Version:             1.1.6
+Version:             1.1.7
 Synopsis:            Deterministic allocation and freeing of scarce resources.
 description:         Hackage documentation generation is not reliable. For up to date documentation, please see: <http://www.stackage.org/package/resourcet>.
 License:             BSD3
