these-0.7.6: Data/Align/Key.hs
-----------------------------------------------------------------------------
-- | Module : Data.Align.Key
--
-- 'These'-based zipping and unzipping of indexed functors.
--
-- @since 0.7.1
module Data.Align.Key (
AlignWithKey (..),
) where
import Data.Key (Key, Keyed (..))
import Data.Vector.Instances ()
import Data.Align
import Data.These
-- Instances
import Control.Applicative (ZipList)
import Data.Hashable (Hashable)
import Data.HashMap.Strict (HashMap)
import Data.IntMap (IntMap)
import Data.Map (Map)
import Data.Sequence (Seq)
import Data.Vector (Vector)
-- | Keyed version of 'Align'.
--
-- @since 0.7.1
class (Keyed f, Align f) => AlignWithKey f where
-- | Analogous to @'alignWith'@, but also provides an index.
alignWithKey :: (Key f -> These a b -> c) -> f a -> f b -> f c
alignWithKey f a b = mapWithKey f (align a b)
instance AlignWithKey Maybe
instance AlignWithKey []
-- | @since 0.7.6
instance AlignWithKey ZipList
instance AlignWithKey Seq
instance AlignWithKey IntMap
instance Ord k => AlignWithKey (Map k)
instance (Eq k, Hashable k) => AlignWithKey (HashMap k)
instance AlignWithKey Vector