Haskell позволяет строить алгебраические типы данных с использованием конструкторов типов и конструкторов данных. Например,
data Circle = Circle Float Float Float
и нам говорят, что этот конструктор данных (Circle справа) - это функция, которая строит круг при предоставлении данных, например x, y, radius.
Circle :: Float -> Float -> Float -> Circle
Мои вопросы:
-
Что конкретно построено этой функцией, в частности?
-
Можем ли мы определить функцию конструктора?
Я видел Smart Constructors, но они просто кажутся дополнительными функциями, которые в конечном итоге называют регулярными конструкторами.
Исходя из фона OO, конструкторы, конечно же, имеют императивные спецификации. В Haskell они кажутся системными.