diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+# 0.2.0.0
+
+* `izipWithM` and `izipWithM_` have been generalised from `Monad` to `Applicative` (which mimics what was done in base-4.9).
+
 # 0.1.0.0
 
 First release.
diff --git a/ilist.cabal b/ilist.cabal
--- a/ilist.cabal
+++ b/ilist.cabal
@@ -1,5 +1,5 @@
 name:                ilist
-version:             0.1.0.0
+version:             0.2.0.0
 synopsis:            Optimised list functions for doing index-related things
 description:
   Optimised list functions for doing index-related things. They're faster than common idioms in all cases, and sometimes they fuse better as well.
diff --git a/lib/Data/List/Index.hs b/lib/Data/List/Index.hs
--- a/lib/Data/List/Index.hs
+++ b/lib/Data/List/Index.hs
@@ -78,8 +78,10 @@
 
 #if __GLASGOW_HASKELL__ < 710
 import Control.Applicative
+import Data.Traversable (sequenceA)
 #endif
 
+import Data.Foldable (sequenceA_)
 import Data.Maybe
 import Data.Monoid
 import GHC.Exts
@@ -612,10 +614,10 @@
     go _ _ _ _ _ _ _ _ = []
 {-# INLINE izipWith7 #-}
 
-izipWithM :: Monad m => (Int -> a -> b -> m c) -> [a] -> [b] -> m [c]
-izipWithM f as bs = sequence (izipWith f as bs)
+izipWithM :: Applicative f => (Int -> a -> b -> f c) -> [a] -> [b] -> f [c]
+izipWithM f as bs = sequenceA (izipWith f as bs)
 {-# INLINE izipWithM #-}
 
-izipWithM_ :: Monad m => (Int -> a -> b -> m c) -> [a] -> [b] -> m ()
-izipWithM_ f as bs = sequence_ (izipWith f as bs)
+izipWithM_ :: Applicative f => (Int -> a -> b -> f c) -> [a] -> [b] -> f ()
+izipWithM_ f as bs = sequenceA_ (izipWith f as bs)
 {-# INLINE izipWithM_ #-}
