module Data.Owoify.Internal.Util.Interleave where

import Prelude

-- | Utility function to interleave two lists.
interleave :: [a] -> [a] -> [a]
interleave :: [a] -> [a] -> [a]
interleave [a]
a [a]
b = [a] -> [a] -> [a] -> Integer -> [a]
forall a a. Integral a => [a] -> [a] -> [a] -> a -> [a]
go [] [a]
a [a]
b Integer
0
  where
    go :: [a] -> [a] -> [a] -> a -> [a]
go [a]
result [] [a]
other a
round        | a -> Bool
forall a. Integral a => a -> Bool
even a
round = if Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [a]
other then [a]
other [a] -> [a] -> [a]
forall a. Semigroup a => a -> a -> a
<> [a]
result else [a]
result
    go [a]
result (a
x : [a]
xs) [a]
other a
round  | a -> Bool
forall a. Integral a => a -> Bool
even a
round = [a] -> [a] -> [a] -> a -> [a]
go (a
x a -> [a] -> [a]
forall a. a -> [a] -> [a]
: [a]
result) [a]
xs [a]
other (a
round a -> a -> a
forall a. Num a => a -> a -> a
+ a
1)
    go [a]
result [a]
_ [] a
_                             = [a]
result
    go [a]
result [a]
arr (a
x : [a]
xs) a
round                 = [a] -> [a] -> [a] -> a -> [a]
go (a
x a -> [a] -> [a]
forall a. a -> [a] -> [a]
: [a]
result) [a]
arr [a]
xs (a
round a -> a -> a
forall a. Num a => a -> a -> a
+ a
1)