title: Can type constructors be considered as types in functional programming languages?
body: <p>I am approaching the Haskell programming language, and I have a background of Scala and Java developer.</p>
  
  <p>I was reading the theory behind type constructors, but I cannot understand if they can be considered types. I mean, in Scala, you use the keywords <code>class</code> or <code>trait</code> to define type constructors. Think about <code>List[T]</code>, or <code>Option[T]</code>. Also in Haskell, you use the same keyword <code>data</code>, that is used for defining new types.</p>
  
  <p>So, are type constructors also types?</p>