[Haskell-cafe] Question about classes from a Haskell newbie.

Scott J. jscott at skynet.be
Wed May 25 08:29:09 EDT 2005


the web page http://research.microsoft.com/~simonpj/multi.ps.gz   mentioned 


is not reachable or does not exist anymore.

Any hints how I can get my hands on this paper are welcome


----- Original Message ----- 
From: "robert dockins" <robdockins at fastmail.fm>
To: <Jeff.Harper at handheld.com>
Cc: <haskell-cafe at haskell.org>
Sent: Tuesday, May 24, 2005 10:07 PM
Subject: Re: [Haskell-cafe] Question about classes from a Haskell newbie.

>>  However, I didn't understand the syntax of the class declaration.
>> Lemmih wrote:
>>  > import Complex
>>  >
>>  > class ConvertibleToComplex a b | a -> b where
>>  >    toComplex :: RealFloat b => a -> Complex b
>> I've looked at several sources to try to understand this declaration.  I 
>> can't find any examples where a class declaration takes two type 
>> variables or uses the pipe symbol.  One of the sources I used was 
>> _Haskell 98 Language and Libraries The Revised Report_.  I'm not an 
>> expert at BNF notation, but the definitions for topdecl, tycls, and tyvar 
>> in the grammar seems to exclude Lemmih's declaration.
>> If someone could point me to some sources that explain this notation, I'd 
>> be very grateful.
> This is a multi-parameter typeclass (with functional dependencies), which 
> is not a part of Haskell 98, so its no surprise that you didn't find it in 
> the Report.  The Muli-parameter part is pretty easy to understand: the 
> type class simply introduces more than one type variable.  Functional 
> dependencies let you say which types should determine which other types. 
> Here are some pages on these ideas:
> http://www.haskell.org/ghc/docs/latest/html/users_guide/type-extensions.html#multi-param-type-classes
> http://www.haskell.org/ghc/docs/latest/html/users_guide/type-extensions.html#functional-dependencies
> http://haskell.org/hawiki/FunDeps
> In this particular instance, what the class definition means is that 
> 'ConvertaibleToComplex' is a class which relates two types 'a' and 'b' AND 
> the type 'a' uniquely determines the type 'b'.
> Hope that helps,
> Robert Dockins
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe

More information about the Haskell-Cafe mailing list