Difficult to model with static type systems.
But what are they good for, really?
You have to write unit tests anyway, and they'll do the same correctness checking that the type system will, but why bother.
Pretty much any serious Python project makes you document parameter and return types anyway.
I hated having to declare raised exceptions back when I wrote Java regularly. Now, I wonder. (And I have to document them anyway!)
Unquestionably easier with dynamic typing, because expressing the type of a function is often difficult (except in Haskell).