We're a place where coders share, stay up-to-date and grow their careers.
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 where 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)
Basically using a recusive function picking one element from each half everytime until both are empty.