{-
  This is a way to only expose methods that helps one to
  construct the ADT and not expose the details behind the
  ADT. In Haskell , this type of initialization is called
  as Smart Constructors.