module Data.Owoify.Internal.Util.Interleave where
import Prelude
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)