It's seems many people are comparing Grunt to Gulp, without considering the subtitles:
Grunt is the "JavaScript Task Runner" and Gulp is "The streaming build system"
There is not much point in using grunt for building or gulp for running tasks, IMHO.
My team is moving towards using gulp for js/css builds and make for tasks. We used grunt before. We probaby should use npm for tasks, though (cross-platform).
They seem naturally sequential and an imperative to me.
I can't imagine how a list of instructions would be clearer in haskell.