Псевдоним типа - это просто другое имя типа. Это не другой тип.
Вы можете создать отдельный тип, обернув его в пользовательский тип, однако:
type Name = Name String
type Surname = Surname String
Но тогда вам также придется создавать и деконструировать его:
namePrinter : Name -> String
namePrinter (Name n) =
n
k : Name
k = Name "kaba"
j : Surname
j = Surname "jaja"
И тогда это не удастся скомпилировать:
main =
Html.text ( "Hello!" ++ namePrinter k ++ namePrinter j )
Кроме того, если вы определяете этот тип в отдельном модуле и не экспортируете его конструктор (ie. Just Name
вместо Name(..)
) у вас есть то, что называется непрозрачный тип , который может быть полезен для принудительного применения инвариантов, которые не может система типов. Например, вы можете принудить, чтобы целое число не могло быть отрицательным.