<div class="gmail_quote">On Tue, Dec 29, 2009 at 2:47 PM, pbrowne <span dir="ltr">&lt;<a href="mailto:Patrick.Browne@comp.dit.ie">Patrick.Browne@comp.dit.ie</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Hi,<br>
I am studying the underlying semantics behind Haskell and to what degree<br>
those semantics are actually implemented. I need to clarify what a *type<br>
synonym* actual means in relation to Haskell&#39;s logic (or formal<br>
semantics). I used the following type synonym:<br>
<br>
type Name = String<br>
getName(n) = n<br>
<br>
I checked the types with two tests:<br>
-- test 1<br>
:t &quot;ww&quot;<br>
&quot;ww&quot; :: [Char]<br>
<br>
-- test 2<br>
:t getName(&quot;ww&quot;)<br>
getName(&quot;ww&quot;) :: Name<br>
<br>
Obviously I get two different types.<br>
In the case of the function Haskells type system seems to pick up enough<br>
information to determine that “ww” is a Name.<br>
But I am not sure what is happening with the literal &quot;ww&quot; in the first test.<br></blockquote><div><br></div><div>This isn&#39;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.</div>
<div><br></div><div>What&#39;s happening here is that ghci(?) is returning the one it thinks is most likely to be familiar to you.</div><div><br></div><div>Bob</div></div>