Hi David,
Functional programming is really simple - which is actually why it's really good. So, you can do it in any language, but I would use a language with static typing (Typescript rather than Javascript) and with closure syntax (every language now). Haskell is a great language in my opinion, but the learning curve is fairly steep.
Unfortunately to implement monads properly your language needs to have higher order type variables, e.g. You know about List[A] where A is a variable, what about M[A] where M is a type variable that takes one argument A. Not many languages have this other than Haskell. But, monads are fairly advanced functional programming and you don't need them for most things.
As for resources, I don't know much about that, but Manning Publications who were my publisher has been putting out a lot of books about functional programming in non-functional languages recently.
Here are the keys to functional programming:
- Make all your data structures immutable. This is why it's good to have a language that can enforce that. e.g. Java can do it with the final keyword.
- Grab a library with immutable data structures.
- View your code as "what the program is" not "what the program does", e.g. in your blog, you view the code as a sequence of transformations with error handling.
- Write pure functions.
- Keep your I/O on the periphery and away from your logic.
- That's really all there is to it.
It doesn't need to be complicated. Type hackery is not really the core of functional programming. It just adds to it.
Steve