История изменений
Исправление qnikst, (текущая версия) :
Там имелось в виду, что было бы хорошо иметь с одним именем несколько функций, которые подбирались бы в зависимости от параметра. То есть + :: Int -> Int -> Int = ...; x :: Int -> Float -> Float = ...
Ясно, в хацкеле для классы типов служат для этого:
class Num a where (+) :: a -> a -> a
Естественно сложить float с Int не удастся, но однинаковые - вполне.
В ML насколько я понимаю есть параметризируемые модули, которые решают аналогичную проблему, т.е. по типу подбирается операция из словаря для данного типа.
Не до конца понял пример с объединением типов, так что воздержусь от комментирования пока.
Исправление qnikst, :
Там имелось в виду, что было бы хорошо иметь с одним именем несколько функций, которые подбирались бы в зависимости от параметра. То есть + :: Int -> Int -> Int = ...; x :: Int -> Float -> Float = ...
Ясно, в хацкеле для классы типов служат для этого:
class Num a where (+) :: a -> a -> a
В ML насколько я понимаю есть параметризируемые модули, которые решают аналогичную проблему, т.е. по типу подбирается операция из словаря для данного типа.
Не до конца понял пример с объединением типов, так что воздержусь от комментирования пока.
Естественно сложить float с Int не удастся, но однинаковые - вполне.
Исходная версия qnikst, :
Там имелось в виду, что было бы хорошо иметь с одним именем несколько функций, которые подбирались бы в зависимости от параметра. То есть + :: Int -> Int -> Int = ...; x :: Int -> Float -> Float = ...
Ясно, в хацкеле для классы типов служат для этого:
class Num a where (+) :: a -> a -> a
В ML насколько я понимаю есть параметр из убедился модули, которые решают аналогичную проблему, т.е. по типу подбирается операция из словаря для данного типа.
Не до конца понял пример с объединением типов, так что воздержусь от комментирования пока.
Естественно сложить float с Int не удастся, но однинаковые - вполне.