Какое использование Вы нашли для типов более высокого разряда в Haskell?

Поскольку Jim Mischel показал , компилятор генерирует идентичный MSIL для двух способов записать для цикла.

, Но это - он тогда: нет никакой причины размышлять о JIT или выполнить измерения скорости. Если две строки кода генерируют идентичный MSIL, мало того, что они будут работать тождественно, они эффективно идентичны.

Никакой возможный JIT не был бы в состоянии различать циклы, таким образом, сгенерированный машинный код должен обязательно быть идентичным, также.

19
задан Don Stewart 18 April 2011 в 00:49
поделиться

3 ответа

Взгляните на такие функции, как withRepoLock в исходном коде Darcs .

Darcs поддерживает несколько форматов репозиториев, и эта поддержка выражена через класс типов. Таким образом, вы можете написать код, общий для форматов репозитория. При фактическом чтении репозитория на диске вы хотите передать этот код с помощью некоторого общего кода, который определяет, в каком формате находится репозиторий, и выбирает правильный экземпляр класса типов.

7
ответ дан 30 November 2019 в 04:29
поделиться

Недавно кто-то задал здесь вопрос о переполнении стека , который может быть решен с помощью типов более высокого ранга.

Другое приложение находится в Scrap Your Boilerplate бумага.

7
ответ дан 30 November 2019 в 04:29
поделиться

Возможно, вы столкнулись с проблемами, когда были бы полезны типы с более высоким рейтингом, но не смогли этого понять. Например, в примере с Darcs они могли легко реализовать это без типов с более высоким рейтингом. Вместо этого для некоторых функций должны были быть предварительные условия, которые вызывающий должен был бы убедиться, что они соответствуют, например, выбор правильного экземпляра функции для формата репозитория.

Преимущество типа с более высоким рейтингом заключается в том, что он передает ответственность для того, чтобы передать это прямо от программиста компилятору. При традиционном подходе, если разработчик Darcs ошибся с типом репозитория, результатом будет либо ошибка времени выполнения, либо поврежденные данные. С типом с более высоким рейтингом разработчик получает ошибку типа во время компиляции.

3
ответ дан 30 November 2019 в 04:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: