And I thought everyone was puzzling these type signatures out all by 
themselves. ;-)

The Haskell learning curve is about the steepest I've ever seen for a computer 
language, but I think I'm catching on.

Thanks for the info.

Michael


--- On Thu, 5/28/09, wren ng thornton <w...@freegeek.org> wrote:

From: wren ng thornton <w...@freegeek.org>
Subject: Re: [Haskell-cafe] What's the problem with iota's type signature?
To: "Haskell-cafe" <haskell-cafe@haskell.org>
Date: Thursday, May 28, 2009, 11:14 PM

michael rice wrote:
> Yeah, I went back and tried double again, though I'd swear I got the dang 
> thing to compile  (and run) w/o errors.
> 
> I guess I meant Num. So Num is a class and Int and Integer are types? What 
> are the other classes? Docs?
> 
> Unification, for me, is pattern matching ala Prolog. What's the meaning in 
> Haskell? Docs?
> 
> I've been digging into this stuff for months and it's still tripping me up. 
> Very frustrating.


As others have mentioned, using GHCi can give you a lot of information. GHCi 
commands begin with a colon followed by the command (kinda like vi), whereas 
anything not beginning with a colon is treated as a Haskell expression to be 
evaluated. The :? command will list all the GHCi commands, which is a good 
place to start.

The :type command takes a Haskell expression and prints the type inferred for 
it. You can also use the command ":set +t" which will make GHCi print the type 
after evaluating each expression; you may want to use this until you get the 
hang of things. The :info command takes a whitespace separated list of 
identifiers and will print their type and other information (e.g. what module 
it comes from, what type class a function belongs to, all the functions that 
are members of a type class, fixity of operators,...)


As far as type classes and the like, there are a bunch. Hoogle[1] is an 
excellent API search engine for looking up this kind of stuff. Just enter the 
name of a function, type class, data type, or enter a type signature. The 
results give links to the online Haddock documentation (either GHC official 
docs, or Hackage docs).


Unification is used when doing type inference. It's the same unification as in 
Prolog, only at the type level. Because of the way inference works, it happens 
that the |a| and |b| type variables must be unified for both of the functions 
you gave. A whole lot more can be said here, though I'm not sure how much you 
care :)  The Wikipedia page on Hindley--Milner[2] gives a good starting point, 
though Haskell's type inference has more bells and whistles than the basic HM 
algorithm.


[1] http://haskell.org/hoogle/
[2] http://en.wikipedia.org/wiki/Hindley-Milner

-- Live well,
~wren
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe



      
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to