module SplitList (every2nd, zipOverflow, splitMiddle) where
splitMiddle :: [a] -> ([a], [a])
splitMiddle :: forall a. [a] -> ([a], [a])
splitMiddle [a]
xs = let firstHalf :: [a]
firstHalf = (a -> a -> a) -> [a] -> [a] -> [a]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith a -> a -> a
forall a b. a -> b -> a
const [a]
xs ([a] -> [a]
forall a. [a] -> [a]
every2nd [a]
xs)
secondHalf :: [a]
secondHalf = [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
zipOverflow [a]
firstHalf [a]
xs
in ([a]
firstHalf, [a]
secondHalf)
every2nd :: [a] -> [a]
every2nd :: forall a. [a] -> [a]
every2nd (a
x:a
_:[a]
xs) = a
x a -> [a] -> [a]
forall a. a -> [a] -> [a]
: [a] -> [a]
forall a. [a] -> [a]
every2nd [a]
xs
every2nd [a]
_ = []
zipOverflow :: [a] -> [a] -> [a]
zipOverflow :: forall a. [a] -> [a] -> [a]
zipOverflow (a
_:[a]
xs) (a
_:[a]
ys) = [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
zipOverflow [a]
xs [a]
ys
zipOverflow [] [a]
ys = [a]
ys
zipOverflow [a]
xs [] = [a]
xs