-- | Bit-shift style argument re-arrangement

module Data.Function.Slip where


slipr :: (a -> b -> c -> d) -> b -> c -> a -> d
slipr :: forall a b c d. (a -> b -> c -> d) -> b -> c -> a -> d
slipr a -> b -> c -> d
f b
b c
c a
a = a -> b -> c -> d
f a
a b
b c
c

<~>> :: (a -> b -> c -> d) -> b -> c -> a -> d
(<~>>) = forall a b c d. (a -> b -> c -> d) -> b -> c -> a -> d
slipr

infixl 8 <~>>


slipl :: (a -> b -> c -> d) -> c -> a -> b -> d
slipl :: forall a b c d. (a -> b -> c -> d) -> c -> a -> b -> d
slipl a -> b -> c -> d
f c
c a
a b
b = a -> b -> c -> d
f a
a b
b c
c

<<~> :: (a -> b -> c -> d) -> c -> a -> b -> d
(<<~>) = forall a b c d. (a -> b -> c -> d) -> c -> a -> b -> d
slipl

infixl 8 <<~>


slipr4 :: (a -> b -> c -> d -> e) -> b -> c -> d -> a -> e
slipr4 :: forall a b c d e. (a -> b -> c -> d -> e) -> b -> c -> d -> a -> e
slipr4 a -> b -> c -> d -> e
f b
b c
c d
d a
a = a -> b -> c -> d -> e
f a
a b
b c
c d
d

<~~>> :: (a -> b -> c -> d -> e) -> b -> c -> d -> a -> e
(<~~>>) = forall a b c d e. (a -> b -> c -> d -> e) -> b -> c -> d -> a -> e
slipr4

infixl 8 <~~>>


slipl4 :: (a -> b -> c -> d -> e) -> d -> a -> b -> c -> e
slipl4 :: forall a b c d e. (a -> b -> c -> d -> e) -> d -> a -> b -> c -> e
slipl4 a -> b -> c -> d -> e
f d
d a
a b
b c
c = a -> b -> c -> d -> e
f a
a b
b c
c d
d

<<~~> :: (a -> b -> c -> d -> e) -> d -> a -> b -> c -> e
(<<~~>) = forall a b c d e. (a -> b -> c -> d -> e) -> d -> a -> b -> c -> e
slipl4

infixl 8 <<~~>


slipr5  :: (a -> b -> c -> d -> e -> f) -> b -> c -> d -> e -> a -> f
slipr5 :: forall a b c d e f.
(a -> b -> c -> d -> e -> f) -> b -> c -> d -> e -> a -> f
slipr5 a -> b -> c -> d -> e -> f
f b
b c
c d
d e
e a
a = a -> b -> c -> d -> e -> f
f a
a b
b c
c d
d e
e

<~~~>> :: (a -> b -> c -> d -> e -> f) -> b -> c -> d -> e -> a -> f
(<~~~>>) = forall a b c d e f.
(a -> b -> c -> d -> e -> f) -> b -> c -> d -> e -> a -> f
slipr5

infixl 8 <~~~>>


slipl5  :: (a -> b -> c -> d -> e -> f) -> e -> a -> b -> c -> d -> f
slipl5 :: forall a b c d e f.
(a -> b -> c -> d -> e -> f) -> e -> a -> b -> c -> d -> f
slipl5 a -> b -> c -> d -> e -> f
f e
e a
a b
b c
c d
d = a -> b -> c -> d -> e -> f
f a
a b
b c
c d
d e
e

<<~~~> :: (a -> b -> c -> d -> e -> f) -> e -> a -> b -> c -> d -> f
(<<~~~>) = forall a b c d e f.
(a -> b -> c -> d -> e -> f) -> e -> a -> b -> c -> d -> f
slipl5

infixl 8 <<~~~>