newtype T a = T { getT::a }
this means that the programmer wants a new type based on whatever a is, ghc will be efficient and use just a bit more resources than dealing with a, but to the programers point of view there is a new type that they use orthoganal to the typeclasses of a.
also the constructor T a :: T a, lets you (un)wrap an a.
and the function getT :: T a -> a, lets you extract the wrapped value.is this just a convention instead of relying on a deconstructive bind? \t -> let T a = t in a should be equivalent to getT right?
am i missing something?