packages feed

nri-prelude-0.7.0.0: src/Internal/Shortcut.hs

{- HLINT ignore -}

module Internal.Shortcut
  ( map,
    map2,
    map3,
    map4,
    map5,
    map6,
    map7,
    map8,
    map9,
    andMap,
    andThen,
    afterwards,
    blank,
  )
where

import Prelude (Applicative, Functor, Monad, fmap, pure, (<*>), (>>=))

andThen :: (Monad m) => (a -> m b) -> m a -> m b
andThen b a =
  a >>= b

afterwards :: (Monad m) => m b -> m a -> m b
afterwards b a =
  a >>= (\_ -> b)

map :: (Functor m) => (a -> value) -> m a -> m value
map =
  fmap

map2 :: (Applicative m) => (a -> b -> value) -> m a -> m b -> m value
map2 func a b =
  pure func <*> a <*> b

map3 :: (Applicative m) => (a -> b -> c -> value) -> m a -> m b -> m c -> m value
map3 func a b c =
  pure func <*> a <*> b <*> c

map4 :: (Applicative m) => (a -> b -> c -> d -> value) -> m a -> m b -> m c -> m d -> m value
map4 func a b c d =
  pure func <*> a <*> b <*> c <*> d

map5 :: (Applicative m) => (a -> b -> c -> d -> e -> value) -> m a -> m b -> m c -> m d -> m e -> m value
map5 func a b c d e =
  pure func <*> a <*> b <*> c <*> d <*> e

map6 :: (Applicative m) => (a -> b -> c -> d -> e -> f -> value) -> m a -> m b -> m c -> m d -> m e -> m f -> m value
map6 func a b c d e f =
  pure func <*> a <*> b <*> c <*> d <*> e <*> f

map7 :: (Applicative m) => (a -> b -> c -> d -> e -> f -> g -> value) -> m a -> m b -> m c -> m d -> m e -> m f -> m g -> m value
map7 func a b c d e f g =
  pure func <*> a <*> b <*> c <*> d <*> e <*> f <*> g

map8 :: (Applicative m) => (a -> b -> c -> d -> e -> f -> g -> h -> value) -> m a -> m b -> m c -> m d -> m e -> m f -> m g -> m h -> m value
map8 func a b c d e f g h =
  pure func <*> a <*> b <*> c <*> d <*> e <*> f <*> g <*> h

map9 :: (Applicative m) => (a -> b -> c -> d -> e -> f -> g -> h -> i -> value) -> m a -> m b -> m c -> m d -> m e -> m f -> m g -> m h -> m i -> m value
map9 func a b c d e f g h i =
  pure func <*> a <*> b <*> c <*> d <*> e <*> f <*> g <*> h <*> i

andMap :: (Applicative m) => m a -> m (a -> b) -> m b
andMap m mf =
  mf <*> m

blank :: (Monad m) => m ()
blank =
  pure ()