Slashdot videos: Now with more Slashdot!
You could easily spend a year banging your head against the wall with functors, monads, etc.
As a scumbag sub-contractor, I was not allowed to look at/have access to certain parts of the codebase -- which meant there was no way for me to do a complete build and actually test my module -- all I could do was run my code through the Ada compiler and let it do its error checking. The schedule was overly-optimistic of course, with all testing pushed to the very end of the project (waterfall).
I coded slowly, and carefully -- pausing often to run the code in my head. I was being constantly harrangued for being behind on my SLOC (occasionally even going backwards, a grave sin). Finally, 3/4 of the way through the project, a code repository was set up. I submitted my code to the one blessed person who had permission to commit to svn on my behalf, and weekly builds were provided for testing purposes.
My stuff largely just worked (and suddenly I was no longer a slacker in the eyes of others). I left that job with a new respect for Ada, though I never used it again. I program in Java (blech) these days, becuase I like being employable.
I'm still waiting for that FP renaissance....