-- | -- Module: Math.NumberTheory.Zeta.Utils -- Copyright: (c) 2018 Alexandre Rodrigues Baldé -- Licence: MIT -- Maintainer: Alexandre Rodrigues Baldé -- -- Shared utilities used by functions from @Math.NumberTheory.Zeta@. module Math.NumberTheory.Zeta.Utils ( intertwine , skipEvens , skipOdds ) where -- | Joins two lists element-by-element together into one, starting with the -- first one provided as argument. -- -- >>> take 10 $ intertwine [0, 2 ..] [1, 3 ..] -- [0,1,2,3,4,5,6,7,8,9] intertwine :: [a] -> [a] -> [a] intertwine [] ys = ys intertwine (x : xs) ys = x : intertwine ys xs -- | Skips every odd-indexed element from an infinite list. -- Do NOT use with finite lists. -- -- >>> take 10 (skipOdds [0, 1 ..]) -- [0,2,4,6,8,10,12,14,16,18] skipOdds :: [a] -> [a] skipOdds (x : _ : xs) = x : skipOdds xs skipOdds xs = xs -- | Skips every even-indexed element from an infinite list. -- Do NOT use with finite lists. -- -- >>> take 10 (skipEvens [0, 1 ..]) -- [1,3,5,7,9,11,13,15,17,19] skipEvens :: [a] -> [a] skipEvens = skipOdds . tail