module Data.Function.Twist where


twist :: (a -> b -> c -> d -> e) -> c -> d -> a -> b -> e
twist fun c d a b = fun a b c d

(<<~~>>) = twist

infixl 8 <<~~>>


twist5r :: (a -> b -> c -> d -> e -> f) -> c -> d -> e -> a -> b -> f
twist5r fun c d e a b = fun a b c d e

(<<~~>>>) = twist5r

infixl 8 <<~~>>>


twist5l :: (a -> b -> c -> d -> e -> f) -> d -> e -> a -> b -> c -> f
twist5l fun d e a b c = fun a b c d e

(<<<~~>>) = twist5l

infixl 8 <<<~~>>


twist5 :: (a -> b -> c -> d -> e -> f) -> d -> e -> c -> a -> b -> f
twist5 fun d e c a b = fun a b c d e

(<<<~~>>>) = twist5

infixl 8 <<<~~>>>


twist6 :: (a -> b -> c -> d -> e -> f -> g) -> d -> e -> f -> a -> b -> c -> g
twist6 fun d e f a b c = fun a b c d e f

(<<~~~>>) = twist6

infixl 8 <<~~~>>


twist7r :: (a -> b -> c -> d -> e -> f -> g -> h) -> d -> e -> f -> g -> a -> b -> c -> h
twist7r fun d e f g a b c = fun a b c d e f g

(<<~~~>>>) = twist7r

infixl 8 <<~~~>>>


twist7l :: (a -> b -> c -> d -> e -> f -> g -> h) -> e -> f -> g -> a -> b -> c -> d -> h
twist7l fun e f g a b c d = fun a b c d e f g

(<<<~~~>>) = twist7l

infixl 8 <<<~~~>>


twist7 :: (a -> b -> c -> d -> e -> f -> g -> h) -> e -> f -> g -> d -> a -> b -> c -> h
twist7 fun e f g d a b c = fun a b c d e f g

(<<<~~~>>>) = twist7

infixl 8 <<<~~~>>>