A "map" function that alternates between two mapping functions
So, like @pigworker has said your code looks functionally good to me, but you don't have to break up your solution into two parts like this or create a data structure you don't need.

You might find a better solution using a different approach (pattern matching):

funkyMap :: (a -&gt; b) -&gt; (a -&gt; b) -&gt; [a] -&gt; [b]
funkyMap p q [] = []
funkyMap p q [x] = [p x]
funkyMap p q (x : y : xs) = p x : q y : funkyMap p q xs


The real benefit of this is you don't have to create any intermediate data structures. 

The idea behind this solution is to let pattern matching do the hard work for you. Really you have 3 senarios for your function


when there are no elements in the list (where you probably just want to return the empty list)
when you have just one element in the list (where you just want to apply p to the element)
when you have 2 or more elements in the list (where you apply p and q, then use recursion to evaluate the rest of the list)


Using pattern matching lets you wrap that logic up in a really obvious way