haskell против python - PullRequest
       12

haskell против python

2 голосов
/ 02 марта 2010

Я ищу, например, где вещи на python было бы легче программировать только потому, что он динамически типизирован?

Я хочу сравнить ее с системой типов Haskell, потому что ее статическая типизация не мешает c # или java. Могу ли я программировать на Haskell так же, как я могу на python, не мешая статической типизации?

PS: я пользователь Python и немного поиграл с ML и Haskell ... ... надеюсь, теперь все понятно ...

Ответы [ 3 ]

7 голосов
/ 02 марта 2010

Могу ли я программировать на Haskell так же, как я могу на Python без статической типизации, являющейся помехой

Да.

Чтобы уточнить, я бы сказал, что основным уловком будет использование экзистенциальных типов в Haskell для гетерогенных структур данных (регулярные структуры данных, содержащие списки элементов различного типа). Это часто ловит ОО людей, привыкших к топу типа «Объект». Он часто ловит программистов на Лиспе / Схеме. Но я не уверен, что это будет иметь значение для Pythonista.

Попытайтесь написать немного на Haskell и вернуться, когда вы получите ошибочную ошибку типа.

Вы должны думать о статической типизации как о выгоде - она ​​проверяет лот вещей для вас, и чем больше вы на это опираетесь, тем меньше вещей вы должны проверять. Кроме того, он позволяет компилятору значительно ускорить ваш код.

5 голосов
/ 02 марта 2010

Ну, для одного вы не можете создать список, содержащий несколько типов значений без упаковщиков (например, чтобы получить список, который может содержать строку или целое число, вам нужно создать список Either Int String и обернуть каждый элемент в Left или Right).

Вы также не можете определить функцию, которая может возвращать несколько типов значений (например, if someCondition then 1 else "this won't compile"), опять же, без использования упаковщиков.

4 голосов
/ 02 марта 2010

Как сказал Крис, это один объективный вопрос (что может сделать язык с динамической типизацией, чего не может сделать статически типизированный?) И один субъективный вопрос (могу ли я использовать Haskell без статической типизации, являющейся помехой). Таким образом, вы получите в основном субъективные ответы, потому что первый вопрос не так интересен.

Для меня самым большим препятствием был тип ввода-вывода в Haskell, потому что мне пришлось остановиться и подумать о том, какой код выполняет ввод-вывод, а какой нет, и явно передавать информацию между ними. Все остальное было довольно легко. Если вы обычно пишете

if someCondition:
    return 1
else:
    return "other"

Тогда вы создаете свои собственные проблемы, Python просто не мешает вам это делать. Хаскелл будет, и это единственное отличие. Единственное исключение - это то, что обычно встречается в Python:

if someErrorCondition:
    return None
else:
    return NewItem(Success)

Вы не можете сделать это в Haskell, потому что нет общего None объекта. Но есть простые способы обойти это.

Сначала я обнаружил, что ошибки типа сбивают с толку, но я научился читать их примерно через неделю.

Я хочу повторить совет Дона: просто попробуйте написать какой-нибудь Haskell и вернитесь, когда вы получите сбивающую с толку ошибку типа.

...