Как сказал Крис, это один объективный вопрос (что может сделать язык с динамической типизацией, чего не может сделать статически типизированный?) И один субъективный вопрос (могу ли я использовать Haskell без статической типизации, являющейся помехой). Таким образом, вы получите в основном субъективные ответы, потому что первый вопрос не так интересен.
Для меня самым большим препятствием был тип ввода-вывода в Haskell, потому что мне пришлось остановиться и подумать о том, какой код выполняет ввод-вывод, а какой нет, и явно передавать информацию между ними. Все остальное было довольно легко. Если вы обычно пишете
if someCondition:
return 1
else:
return "other"
Тогда вы создаете свои собственные проблемы, Python просто не мешает вам это делать. Хаскелл будет, и это единственное отличие. Единственное исключение - это то, что обычно встречается в Python:
if someErrorCondition:
return None
else:
return NewItem(Success)
Вы не можете сделать это в Haskell, потому что нет общего None
объекта. Но есть простые способы обойти это.
Сначала я обнаружил, что ошибки типа сбивают с толку, но я научился читать их примерно через неделю.
Я хочу повторить совет Дона: просто попробуйте написать какой-нибудь Haskell и вернитесь, когда вы получите сбивающую с толку ошибку типа.