5 ms·
It's just semantics. data Bool = False | True data Maybe a = Nothing | Just a Bool is a nullary type constructor or simply type. False and True are nu
by pwm 4y ago
It's just semantics.
data Bool = False | True
data Maybe a = Nothing | Just a
Bool is a nullary type constructor or simply type. False and True are nullary data constructors or simply constants. Maybe is an unary type constructor taking one parameter to construct a fully saturated type (eg. Maybe Int), but calling it a "Maybe type" is ok, no crazy ambiguity. Nothing is a constant and Just is an unary data constructor taking one parameter to construct fully saturated data (eg. Just 1).
- dllthomas 4y agoAnd in the context of Haskell, non-nullary type constructors are still types. They don't happen to be the types of any values, but they can still parameterize types, be constrained by type equality (eg. a ~ Maybe), etc.
- earleybird 4y agoSo in essence I could think of types as functions (possibly nullary) from types to types? Bool = sum(False, True) Maybe = λ a . sum(Nothing, Just(a))
- pwm 4y ago> So in essence I could think of types as functions (possibly nullary) from types to types? Type constructors, yes. In Haskell the type of type constructors are called kinds: λ> :kind Bool Bool :: Type λ> :kind Maybe Maybe :: Type -> Type λ> :kind Maybe Int Maybe Int :: Type λ> :kind Either Either :: Type -> Type -> Type λ> :kind Eq Eq :: Type -> Constraint λ> :kind Functor Functor :: (Type -> Type) -> Constraint