September 17th, 2012

with Cat The Cat

Система типов Скалы.

Подробное объяснение некоторых проблем с системой типов Скалы (и, заодно, с компилятором). Один из комментариев содержит параграф "I am the original author of scalaz. I still don't understand how to best help Scala figure stuff out. I am starting to think it is a lost cause.".
with Cat The Cat

Кратенько про нововведения в систему типов Хаскеля.

Сейчас добавляют натуральные числа и типы-строки. Натуральные числа представлены внутри в виде целых (Integer), для них поддержаны базовые операции (+, -, *) и по заверениям создателей они работают чрезвычайно быстро.

Эти числа надо переводить в другие типы, в ту же арифметику Пеано на типах. С обычными семействами типов будут проблемы:
type family ToPeano (b :: Nat)
type instance ToPeano 0 = Zero
type instance ToPeano n = Succ (ToPeano  (n-1)) -- перекрытие образцов.
Что предлагается. Предлагается создавать закрытые семейства. Я точно не знаю, как это называется, но выглядит вот так:
type family ToPeano (b :: Nat) where
          | ToPeano 0 = Zero
          | ToPeano n = Succ (ToPeano  (n-1))
Здесь перекрытия образцов нет, поскольку образы сравниваются сверху вниз, а не в произвольном порядке. Это совершенно совпадает по смыслу с определением функции:
toPeano :: Integer -> Natural
toPeano 0 = Zero
toPeano n = Succ (toPeano (n-1))
Вот.