I\'m a newcomer to Haskell and am currently going through Real World Haskell. The book says the type constructor is used only in the type signature while the value constructor i
One convenient way to get the intuition about Types and Values is that the former are compile-time values while the latter are run-time values. In other words, Type constructors are constructors of values in the set of Haskell Types, for the sole aim of typing your program at compile time. That also means you can not construct a type at run-time, and you can not construct a value at compile-time.
So, because you can not explicitly branch at run-time on the basis of a type value (though you can implicitly with typeclasses), Type constructors are totally useless as run-time objects and in many cases are totally absent in the final binary. Conversely, because values constructors allows to construct values in the set of their type at run-time, they are totally useless as compile-time object.
Because of this simple property, Type constructors and Value constructors can share names unambiguously.