Hoogle Search
Within LTS Haskell 24.52 (ghc-9.10.3)
Note that Stackage only displays results for the latest LTS and Nightly snapshot. Learn more.
-
relude Relude.Container.Reexport A map of integers to values a.
inverseMap :: (Bounded a, Enum a, Ord k) => (a -> k) -> k -> Maybe arelude Relude.Enum inverseMap f creates a function that is the inverse of a given function f. It does so by constructing Map internally for each value f a. The implementation makes sure that the Map is constructed only once and then shared for every call. Memory usage note: don't inverse functions that have types like Int as their input. In this case the created Map will have huge size. The complexity of reversed mapping is <math>. Performance note: make sure to specialize monomorphic type of your functions that use inverseMap to avoid Map reconstruction. One of the common inverseMap use-case is inverting the show or a show-like function.
>>> data Color = Red | Green | Blue deriving (Show, Enum, Bounded) >>> parse = inverseMap show :: String -> Maybe Color >>> parse "Red" Just Red >>> parse "Black" Nothing
Correctness note: inverseMap expects injective function as its argument, i.e. the function must map distinct arguments to distinct values. Typical usage of this function looks like this:data GhcVer = Ghc802 | Ghc822 | Ghc844 | Ghc865 | Ghc881 deriving (Eq, Ord, Show, Enum, Bounded) showGhcVer :: GhcVer -> Text showGhcVer = \case Ghc802 -> "8.0.2" Ghc822 -> "8.2.2" Ghc844 -> "8.4.4" Ghc865 -> "8.6.5" Ghc881 -> "8.8.1" parseGhcVer :: Text -> Maybe GhcVer parseGhcVer = inverseMap showGhcVer
bimapBoth :: Bifunctor f => (a -> b) -> f a a -> f b brelude Relude.Extra.Bifunctor Maps a function over both elements of a bifunctor.
>>> bimapBoth length ([True], [False, True]) (1,2) >>> map (bimapBoth not) [Left True, Right False] [Left False,Right True]
bimapF :: (Functor f, Bifunctor p) => (a -> c) -> (b -> d) -> f (p a b) -> f (p c d)relude Relude.Extra.Bifunctor Fmaps functions for nested bifunctor. Short for fmap (bimap f g).
>>> bimapF not length $ Just (False, ['a', 'b']) Just (True,2)
foldMap1 :: (Foldable1 f, Semigroup m) => (a -> m) -> f a -> mrelude Relude.Extra.Foldable1 Map each element of the non-empty structure to a semigroup, and combine the results.
>>> foldMap1 SG.Sum (1 :| [2, 3, 4]) Sum {getSum = 10} >>> foldMap1 show (123 :| [456, 789, 0]) "1234567890"class StaticMap t =>
DynamicMap trelude Relude.Extra.Map Modifiable Map.
-
relude Relude.Extra.Map Read-only map or set. Contains polymorphic functions which work for both sets and maps.
fmapToFst :: Functor f => (a -> b) -> f a -> f (b, a)relude Relude.Extra.Tuple Like fmap, but also keep the original value in the snd position. A dual to fmapToSnd.
>>> fmapToFst show [3, 10, 2] [("3",3),("10",10),("2",2)]fmapToSnd :: Functor f => (a -> b) -> f a -> f (a, b)relude Relude.Extra.Tuple Like fmap, but also keep the original value in the fst position. A dual to fmapToFst.
>>> fmapToSnd show [3, 10, 2] [(3,"3"),(10,"10"),(2,"2")]
asumMap :: forall b m f a . (Foldable f, Alternative m) => (a -> m b) -> f a -> m brelude Relude.Foldable.Fold Alternative version of asum that takes a function to map over.
>>> asumMap (\x -> if x > 2 then Just x else Nothing) [1..4] Just 3