>Is that the primary advantage? I’m not as sure as you seem to be.
It's the combination of that and exhaustive pattern matching that I see as the reason to use strongly-typed functional languages.
>No type system is enforcing those.
This is quite different from not having static type checks at all though. At least with static typing I know that bind and fmap have the correct signature, which is certainly not a verification that they follow _all_ the rules they should (though I am a big fan of dependently typed languages too), yet it is still assurance that the function fulfills a basic premise.
>If you’re comfortable trusting someone else is following that rule why is trusting they follow another so alien?
Because I have seem them betray that trust, over and over again, intentionally and unintentionally, though never actively malicious. Type checking is work the compiler can do for me, so I see no reason to do it myself, where I am known to be rather clumsy and stupid and prone to writing bugs and being human.