Haskell - alternating elements from two lists

How about exchanging the arguments during recursion-descend?

blend (x:xs) ys = x:(blend ys xs)
blend _ _ = []

You can even generalise this approach for any number of lists (I'll leave this to you) or take the remaining elements of a list if the other is empty:

blend _ ys = ys

If you want to zip, generate lists instead of tuples:

concat $ zipWith (\x y -> [x,y]) [1,2,3] [4,5,6]

Some pointless fun:

concat $ zipWith ((flip(:)).(:[])) [1,2,3] [4,5,6]  

Probably the easiest way:

import Data.List
concat $ transpose [[1,2,3],[4,5,6]]