История изменений
Исправление Miguel, (текущая версия) :
Не совсем так.
Грубо говоря, идея была в том, чтобы программист не складывал, случайно, градусы Цельсия и Фаренгейта. Поэтому переменная, в которой градусы Цельсия, будет иметь префикс cd, а переменная, в которой градусы Фаренгейта, префикс fd. Если программист ошибётся и сложит одно с другим, то это будет проще заметить.
В нормальном языке вместо этого можно и нужно использовать систему типов, и писать что-то вроде
newtype Celsius = Celsius Int deriving (Eq, Ord, Num)
newtype Fahrenheit = Fahrenheit Int deriving (Eq, Ord, Num)
и компилятор сам проследит, чтобы Цельсия с Цельсием можно было складывать, Фаренгейта с Фаренгейтом — тоже, а вот одно с другим — нельзя. Но в то время хороших языков не было.
Исходная версия Miguel, :
Не совсем так.
Грубо говоря, идея была в том, чтобы программист не складывал, случайно, градусы Цельсия и Фаренгейта. Поэтому переменная, в которой градусы Цельсия, будет иметь префикс cd, а переменная, в которой градусы Фаренгейта, префикс fd. Если программист ошибётся и сложит одно с другим, то это будет проще заметить.
В нормальном языке вместо этого можно и нужно использовать систему типов, и писать что-то вроде
newtype Celsius = Celsius Int deriving Eq, Ord, Num
newtype Fahrenheit = Fahrenheit Int deriving Eq, Ord, Num
и компилятор сам проследит, чтобы Цельсия с Цельсием можно было складывать, Фаренгейта с Фаренгейтом — тоже, а вот одно с другим — нельзя. Но в то время хороших языков не было.