Basically using a recusive function picking one element from each half everytime until both are empty.
faro :: [a] -> [a]
faro deck = merge False  $ splitAt (length deck `div` 2) deck
merge _ result (, ) = reverse result
merge False acc (a : as, bs) = merge True (a : acc) (as, bs)
merge True acc (as, b : bs) = merge False (b : acc) (as, bs)
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.