-- | Complement "Data.Strict.Tuple".
module Mikan.Utils.Tuple.Strict
  ( (&!&)
  -- * Re-exports
  , module Data.Strict.Tuple
  )
  where

import Data.Strict.Tuple

infixr 3 &!&

{-# INLINE (&!&) #-}
-- | Strict version of 'Control.Arrow.&&&'.
(&!&) :: (a -> b) -> (a -> c) -> a -> Pair b c
&!& :: forall a b c. (a -> b) -> (a -> c) -> a -> Pair b c
(&!&) a -> b
f a -> c
g = \ !a
a -> a -> b
f a
a b -> c -> Pair b c
forall a b. a -> b -> Pair a b
:!: a -> c
g a
a