diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Changelog for ixset-typed-conversions
 
+## (v0.1.2.0)
+
+* Add `toHashMapBy'` and `toHashMapByM'`.
+
 ## (v0.1.1.0)
 
 * Add cofree conversions.
diff --git a/ixset-typed-conversions.cabal b/ixset-typed-conversions.cabal
--- a/ixset-typed-conversions.cabal
+++ b/ixset-typed-conversions.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           ixset-typed-conversions
-version:        0.1.1.1
+version:        0.1.2.0
 synopsis:       Conversions from ixset-typed to other containers.
 description:    Conversions from ixset-typed to other containers; HashMaps, zippers.
 category:       Data Structures
diff --git a/src/Data/IxSet/Typed/Conversions.hs b/src/Data/IxSet/Typed/Conversions.hs
--- a/src/Data/IxSet/Typed/Conversions.hs
+++ b/src/Data/IxSet/Typed/Conversions.hs
@@ -10,6 +10,8 @@
   toHashMap
 , toHashMapBy
 , toHashMapByM
+, toHashMapBy'
+, toHashMapByM'
 , toZipperAsc
 , toZipperDesc
 , toAscCofreeList
@@ -41,6 +43,16 @@
 toHashMapByM :: (Monad m, Hashable a, IsIndexOf a xs) => IxSet xs k -> (a -> [k] -> m k') -> m (HM.HashMap a k')
 toHashMapByM xs f = fmap HM.fromList $ forM (Ix.groupDescBy xs) $ \(a, ks) -> do
                        z <- f a ks
+                       return (a, z)
+
+-- | Like `toHashMapBy`, but uses a function on the requeried `IxSet` for that key.
+toHashMapBy' :: (Hashable a, IsIndexOf a xs, Indexable xs k) => IxSet xs k -> (a -> IxSet xs k -> k') -> HM.HashMap a k'
+toHashMapBy' xs f = HM.fromList $ flip map (Ix.indexKeys xs) $ \a -> (a, f a (xs Ix.@+ [a]))
+
+-- | Like `toHashMapByM`, but uses a function on the requeried `IxSet` for that key.
+toHashMapByM' :: (Monad m, Hashable a, IsIndexOf a xs, Indexable xs k) => Ix.IxSet xs k -> (a -> Ix.IxSet xs k -> m k') -> m (HM.HashMap a k')
+toHashMapByM' xs f = fmap HM.fromList $ forM (Ix.indexKeys xs) $ \a -> do
+                       z <- f a (xs Ix.@+ [a])
                        return (a, z)
 
 -- | Convert an `IxSet` to a `Zipper` by descending sort on an index.
