* pbrowne wrote:
> semantics). I used the following type synonym:
type String = [Char]
type Name = String
String, Name and [Char] are synonyms, which means every expression is
identically to the others. There is no difference besides that String and
Name are type aliases while [Char] is a type construct.
getName :: String -> Name
getName n = n
> I checked the types with two tests:
> -- test 1
> "ww" :: [Char]
The type interference system determines that you have an array of
characters, hence a [Char]. All those existing type aliases are suppressed
by the module. Otherwise the list get's very long ...
> -- test 2
> getName("ww") :: Name
>From the definition of getName, the compiler knows which type alias is
prefered from the set of equivalent names.
> Obviously I get two different types.
You get two different representations of the same type.
> In the case of the function Haskells type system seems to pick up enough
> information to determine that âwwâ is a Name.
Nope. "ww" is still a [Char] for the compiler. And you do not even check for
the type of "ww".
:t snd . (\x -> (getName x, x)) $ "ww"
... :: String
Haskell-Cafe mailing list