As we mentioned at the start, Haskell is a strongly-typed language so let's expand on it. Haskell is very serious about types and strongly-typed means that each expression in Haskell has an associated type to its value. Expression types can be basic, which are built-in the language – the likes of Int, Integer, Float, Double, Char, String and Bool. Note that type names always start with an uppercase letter. Types can also be polymorphic (which is why Haskell is also a polymorphically-typed language), in which case they are specified through type variables beginning with a lowercase letter, but more on that will come shortly.