same things you normally do in C++
it's a fundamentally different model of execution, but its feature-wise equivalent to OOP/imperative; in the same fashion that imperative is equivalent to OOP
primary benefit though is being much better at writing generic code, both in the sense of small composable functions, and generic types, than the alternative models. primary loss, particularly with haskell's laziness, is realizing performance hits without profiling
but if you really want to be cool, you would use forth
or perhaps lisp (racket?)