Я очень новичок в Haskell, поэтому извините, если это основной вопрос или вопрос, основанный на шатком понимании
Программирование на уровне типов — захватывающая идея для меня. Я думаю, что понял основную предпосылку, но чувствую, что есть и другая сторона, которая мне неясна. Я понимаю, что идея состоит в том, чтобы перенести логику и вычисления во время компиляции, а не во время выполнения, используя типы. Таким образом вы превращаете то, что обычно является логикой/состоянием/данными во время выполнения, в статическую логику, например. размер коллекций.
Итак, я понимаю, что, например, вы можете иметь натуральные числа на уровне типов и выполнять арифметику на уровне типов с этими натуральными числами, и все эти вычисления и безопасность типов выполняются во время компиляции.
Но что означает такая арифметика во время выполнения? Тем более, что в Haskell есть полное стирание типов. Так например
- Если я объединяю два списка на уровне типов, подразумевает ли безопасность на уровне типов что-то о поведении или производительности этой конкатенации во время выполнения? Или аспект программирования на уровне типов имеет значение только во время компиляции, когда программист борется с кодом и собирает все вместе?
- Или если у меня есть два номера уровня типа, а затем я их перемножаю, что это значит во время выполнения? Если эти операции с большими числами выполняются медленно во время компиляции, то выполняются ли они мгновенно во время выполнения?
- Или если мы реализовали RSA на уровне типов, а затем использовали его, что это даже означает во время выполнения?
Это чисто инструмент безопасности/согласованности во время компиляции? или программирование на уровне типов также дает нам что-то для среды выполнения? Логика и арифметика «оплачиваются во время компиляции» или просто «гарантируются во время компиляции» (если это вообще имеет смысл)?
Data.Typeable
иData.Data
. - person MCH   schedule 11.05.2018Typeable
илиProxy
, вы можете выполнять операции, используя информацию об этом типе во время выполнения. - person MCH   schedule 11.05.2018