On Tue, Dec 29, 2009 at 2:47 PM, pbrowne <Patrick.Browne@comp.dit.ie> wrote:
Hi,
I am studying the underlying semantics behind Haskell and to what degree
those semantics are actually implemented. I need to clarify what a *type
synonym* actual means in relation to Haskell's logic (or formal
semantics). I used the following type synonym:

type Name = String
getName(n) = n

I checked the types with two tests:
-- test 1
:t "ww"
"ww" :: [Char]

-- test 2
:t getName("ww")
getName("ww") :: Name

Obviously I get two different types.
In the case of the function Haskells type system seems to pick up enough
information to determine that “ww” is a Name.
But I am not sure what is happening with the literal "ww" in the first test.

This isn't really Haskell doing anything, but a particular implementation... In Haskell a type synonym is *exactly* that – Name is indistinguishable from String, which in turn is indistinguishable from [Char].  The compiler/interpretter is free to return any one of them as it choses.

What's happening here is that ghci(?) is returning the one it thinks is most likely to be familiar to you.

Bob