I learned just some rudimentary Haskell. It tends to force you into a kind of bottom-up-test-as-you-go approach, which can work pretty well when you have no hidden state. The next time I wrote a shell script, I did it like that, and started writing much better shell scripts. It also surprised me how much easier that flow worked with the shell than with Python, even with Python's REPL. To do the equivalent thing in Python, testing functions nearly interactively, I had to do something like import module; reload module; from module import * over and over. At the shell prompt, I just kept hitting the up arrow to source the script I had just saved so I could try out the new function.
I wrote a trivial amount of Haskell, and it still changed how I write shell scripts, which I didn't expect at all.