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

Sep 17, 2012 13:58

Сейчас добавляют натуральные числа и типы-строки. Натуральные числа представлены внутри в виде целых (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))Вот.

строгая типизация, Хаскель

Previous post Next post
Up