kmonad-0.4.2: Advanced keyboard remapping utility
Copyright(c) David Janssen 2019
LicenseMIT
Maintainerjanssen.dhj@gmail.com
Stabilityexperimental
Portabilityportable
Safe HaskellSafe-Inferred
LanguageHaskell2010

KMonad.Util.MultiMap

Description

This datastructure represents a `k -> Set v` mapping: that is to say, each key can have multiple values (but no duplicates). Additionally, we provide some operations to reverse this mapping.

In KMonad we use this exclusively to easily define multiple names for the same Keycode in a reversible manner.

Synopsis

Types

 

data MultiMap k v Source #

The MultiMap, which describes a one to many (unique) mapping

Instances

Instances details
CanMM k v => Monoid (MultiMap k v) Source # 
Instance details

Defined in KMonad.Util.MultiMap

Methods

mempty :: MultiMap k v #

mappend :: MultiMap k v -> MultiMap k v -> MultiMap k v #

mconcat :: [MultiMap k v] -> MultiMap k v #

CanMM k v => Semigroup (MultiMap k v) Source # 
Instance details

Defined in KMonad.Util.MultiMap

Methods

(<>) :: MultiMap k v -> MultiMap k v -> MultiMap k v #

sconcat :: NonEmpty (MultiMap k v) -> MultiMap k v #

stimes :: Integral b => b -> MultiMap k v -> MultiMap k v #

(Show k, Show v) => Show (MultiMap k v) Source # 
Instance details

Defined in KMonad.Util.MultiMap

Methods

showsPrec :: Int -> MultiMap k v -> ShowS #

show :: MultiMap k v -> String #

showList :: [MultiMap k v] -> ShowS #

CanMM k v => At (MultiMap k v) Source # 
Instance details

Defined in KMonad.Util.MultiMap

Methods

at :: Index (MultiMap k v) -> Lens' (MultiMap k v) (Maybe (IxValue (MultiMap k v))) #

CanMM k v => Ixed (MultiMap k v) Source # 
Instance details

Defined in KMonad.Util.MultiMap

Methods

ix :: Index (MultiMap k v) -> Traversal' (MultiMap k v) (IxValue (MultiMap k v)) #

type Index (MultiMap k v) Source # 
Instance details

Defined in KMonad.Util.MultiMap

type Index (MultiMap k v) = k
type IxValue (MultiMap k v) Source # 
Instance details

Defined in KMonad.Util.MultiMap

type IxValue (MultiMap k v) = HashSet v

mkMultiMap :: (Foldable t1, Foldable t2, CanMM k v) => t1 (k, t2 v) -> MultiMap k v Source #

Create a new multimap from a foldable of (k, foldable v) pairs.

fromSingletons :: (Foldable t, CanMM k v) => t (k, v) -> MultiMap k v Source #

Create a new multimap from a foldable of (k, v) pairs

Operations on MultiMaps

 

itemed :: CanMM k v => Fold (MultiMap k v) (k, v) Source #

A fold over all the (k, v) pairs in a MultiMap

reverse :: (CanMM k v, CanMM v k) => MultiMap k v -> MultiMap v k Source #

Reverse a MultiMap. Note: this is not necessarily a lossless conversion.