{-# LANGUAGE NoImplicitPrelude, BangPatterns #-}
{-# OPTIONS_HADDOCK -show-extensions #-}
{-# OPTIONS_GHC -O #-}
module Data.IntermediateStructures1
(
mapI
, map2I
, inter
, inter'
, swapinter
, swapinter'
)
where
import GHC.Base
import GHC.List (concatMap)
mapI :: (a -> Bool) -> (a -> [a]) -> [a] -> [a]
mapI :: forall a. (a -> Bool) -> (a -> [a]) -> [a] -> [a]
mapI a -> Bool
p a -> [a]
f (a
x:[a]
xs) =
case a -> Bool
p a
x of
Bool
True -> a -> [a]
f a
x [a] -> [a] -> [a]
forall a. Monoid a => a -> a -> a
`mappend` (a -> Bool) -> (a -> [a]) -> [a] -> [a]
forall a. (a -> Bool) -> (a -> [a]) -> [a] -> [a]
mapI a -> Bool
p a -> [a]
f [a]
xs
Bool
_ -> a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:(a -> Bool) -> (a -> [a]) -> [a] -> [a]
forall a. (a -> Bool) -> (a -> [a]) -> [a] -> [a]
mapI a -> Bool
p a -> [a]
f [a]
xs
mapI a -> Bool
_ a -> [a]
_ [a]
_ = []
{-# NOINLINE mapI #-}
map2I :: (a -> Bool) -> (a -> [[a]]) -> [a] -> [a]
map2I :: forall a. (a -> Bool) -> (a -> [[a]]) -> [a] -> [a]
map2I a -> Bool
p a -> [[a]]
f (a
x:[a]
xs) =
case a -> Bool
p a
x of
Bool
True -> ([[a]] -> [a]
forall a. Monoid a => [a] -> a
mconcat ([[a]] -> [a]) -> (a -> [[a]]) -> a -> [a]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> [[a]]
f (a -> [a]) -> a -> [a]
forall a b. (a -> b) -> a -> b
$ a
x) [a] -> [a] -> [a]
forall a. Monoid a => a -> a -> a
`mappend` (a -> Bool) -> (a -> [[a]]) -> [a] -> [a]
forall a. (a -> Bool) -> (a -> [[a]]) -> [a] -> [a]
map2I a -> Bool
p a -> [[a]]
f [a]
xs
Bool
_ -> a
x a -> [a] -> [a]
forall a. a -> [a] -> [a]
: (a -> Bool) -> (a -> [[a]]) -> [a] -> [a]
forall a. (a -> Bool) -> (a -> [[a]]) -> [a] -> [a]
map2I a -> Bool
p a -> [[a]]
f [a]
xs
map2I a -> Bool
_ a -> [[a]]
_ [a]
_ = []
{-# NOINLINE map2I #-}
inter :: (a -> b) -> (a -> c) -> (a -> b -> c -> d) -> a -> d
inter :: forall a b c d.
(a -> b) -> (a -> c) -> (a -> b -> c -> d) -> a -> d
inter a -> b
fb a -> c
fc a -> b -> c -> d
f3d a
x = a -> b -> c -> d
f3d a
x (a -> b
fb a
x) (a -> c
fc a
x)
{-# INLINE inter #-}
swapinter :: (a -> c) -> (a -> b) -> (a -> b -> c -> d) -> a -> d
swapinter :: forall a c b d.
(a -> c) -> (a -> b) -> (a -> b -> c -> d) -> a -> d
swapinter a -> c
fc a -> b
fb a -> b -> c -> d
f3d a
x = a -> b -> c -> d
f3d a
x (a -> b
fb a
x) (a -> c
fc a
x)
{-# INLINE swapinter #-}
inter' :: (a -> b) -> (a -> c) -> (a -> b -> c -> d) -> a -> d
inter' :: forall a b c d.
(a -> b) -> (a -> c) -> (a -> b -> c -> d) -> a -> d
inter' a -> b
fb a -> c
fc a -> b -> c -> d
f3d !a
x = a -> b -> c -> d
f3d a
x (a -> b
fb a
x) (a -> c
fc a
x)
{-# INLINE inter' #-}
swapinter' :: (a -> c) -> (a -> b) -> (a -> b -> c -> d) -> a -> d
swapinter' :: forall a c b d.
(a -> c) -> (a -> b) -> (a -> b -> c -> d) -> a -> d
swapinter' a -> c
fc a -> b
fb a -> b -> c -> d
f3d !a
x = a -> b -> c -> d
f3d a
x (a -> b
fb a
x) (a -> c
fc a
x)
{-# INLINE swapinter' #-}