Opaque types
Непрозрачните типове (opaque types) са потребителски типове, самият тип е публичен (public) и може да се използва и от други модули, но конструкторите му са частни (private) и могат да се използват само в модула, в който е дефиниран типът. По този начин другите модули не може да конструират стойности от този тип, нито да правят съпоставяне с шаблони върху него.
Това е полезно, когато създаваме типове с интелигентни конструктори (smart constructors). Интелигентният конструктор е функция, която създава стойност от даден тип, но с повече ограничения от тези, които би имало, ако програмистът можеше директно да извика конструкторите на типа. Така е по- лесно да се гарантира, че типът се използва правилно.
Например, този потребителски тип PositiveInt
(положително цяло
число) е непрозрачен (opaque). Другите модули е нужно да използват функцията
new
(нов) за да конструират стойност от този тип. Тази функция
гарантира, че цялото число е положително.