Registry for Haskell extensions?

1995-07-24 Thread Claus Reinke

The Preface of the Haskell Report says:

  The comittee hopes that Haskell can serve as a basis for future research
  in language design. We hope that extensions or variants of the language
  may appear, incorporating experimental features.

Various extensions have been proposed or even implemented. It would be nice
to have a second companion document to the Haskell Report, dedicated to 

Placed at the official WWW-sites of the Report, but updated more frequently,
it would provide a central registry for extension proposals and a central
source of information for both the comittee and 'ordinary' Haskell users.

The extension register should be divided into categories roughly describing
the status of each proposal and could even include comments from the comittee,
like: 'We rejected this proposal for the following reasons' or 'We judge this
to be a very interesting extension, but haven't decided yet about the best
way to include it in the standard'. There should be a list of open problems
(e.g. conflicts with other language elements), expected advantages and known
disadvantages for each proposal.

Categories could be:

  PROPOSED  description available (formal or informal)
  REJECTED  rejected by the comittee or given up by the author
  PROTOTYPE implemented in at least one of the available systems
  SCHEDULED accepted (will be included in one of the next versions)

What do You think about it?

Some examples: 

(the list is far from complete and only intended to show the need for a 
register, so please, don't flame me for mistakes and omissions ;-)

STATE: Haskell 1.2



  existential types (chalmers)
  fudgets   (chalmers)
  mutable arrays(glasgow)
  ST monad  (glasgow)
  ccall (glasgow)
  unboxed datatypes (glasgow)
  constructor classes   (nottingham)
  monad comprehensions  (nottingham)
  records   (yale)
  foreign function interface(yale)
  X window interface(yale)
  concurrent execution, ...

  monadic I/O   (1.3)

Hmm.., there should be a section on proposals concerning the 
language environment as well:

  debugger  (??)


  interactive environment   (chalmers,nottingham,yale)
  parser generator  (glasgow)
  profiling, ...


Claus ReinkeUniversity of Kiel
email: [EMAIL PROTECTED]   Department of Computer Science  Preusserstr. 1-9,   24105 Kiel

Re: adding instances to (,)

1995-07-24 Thread peterson-john

Your error messages from ghc are correct: you have violated the
infamous C-T rule (section 4.3.2, page 32) which restricts instance
declarations to the module containing either the class or the
datatype.  Since (,) and Num are both in the prelude, you can't
compile this in official Haskell 1.2.  You could define your own
datatype isomorphic to (,) but you won't get the nice notation.

This should be legal in Haskell 1.3 (once it's done!) - the C-T rule
can be quite annoying so it's being relaxed.

Just remember: HUGS is not Haskell  :-).

  John Peterson
  Yale Haskell Project

adding instances to (,)

1995-07-24 Thread Sergei D. Meshveliani

Dear sir,

I had written several pages of Haskell scripts, tried  HUGS Haskell
on them, debugged, and now I'm trying to complile the stuff with 
Glasgow Haskell.

ghc-0.25  dislikes the following declarations:

module  M  where

instance  (Num a, Num b) =  Num (a,b)  
  (x,y)+(x1,y1) = (x+x1, y+y1)

This module only tries to export the instance for  (,):

(Num a, Num b) =  Num (a,b)  

HUGS Haskell  (it ignores modularity)  makes this  (+)  for pairs
all right, so one can evalute  (1,1)+(1,2) - (2,3).

But  ghc-0.25
says that this instance for Num should be declared in the same
module where the type constructor is defined.

I guess, it is the  (,)  constructor from the  Prelude  module.

Should one add an instance of  Num for  (,)  to  Prelude ?

And how to do this ?

Haskell-1.3 report contains an example:

module A where
import Prelude hiding (map)
map f x = x f

This module redefines  `map'  totally.

Should I redefine totally  (,)  with its instances in this way ?

Besides,  import Prelude hiding ( (,) )  

is qualified as illegal syntax.

Does this all mean that to overload (+) for pairs one should 
define some new constructor, isomorphic to  (,)  but with the
additional instances ?  This does not look nice ...

Thanks in advance.

Sergei D.Meshveliani