[Hugs] #89: type inference failure in ghc/hugs extensions

Hugs trac at galois.com
Tue Feb 3 13:09:02 EST 2009


#89: type inference failure in ghc/hugs extensions
---------------------+------------------------------------------------------
  Reporter:  guest   |       Owner:  nobody             
      Type:  defect  |      Status:  reopened           
  Priority:  major   |   Milestone:                     
 Component:  hugs    |     Version:  200609             
Resolution:          |    Keywords:  instance extensions
---------------------+------------------------------------------------------
Changes (by guest):

  * status:  closed => reopened
  * resolution:  invalid =>

Comment:

 Replying to [comment:1 ross]:
 > There's an error in the example: should be (a,a) in the instance.  If
 test1 is supplied with a signature, hugs then accepts this (but GHC 6.10
 doesn't).

 I understand the proposed fix to be essentially as follows, wherein the
 TypeCast classes become unnecessary
 {{{
 instance Num a => Num (a,a) where
         (x,y)*(u,v) = (x*u-y*v, x*v+y*u)
 test1 :: Num a => (a,a)
 test1 = (1,1)*(2,2)
 }}}
 This code is defective in that (a,a) in the instance head does not
 force the two operands in (x,y) to the same type when (x,y) serves as
 a Num.  The type of test1 cannot be inferred; it has to be declared.
 (I suspect GHC's rejection of the code is a symptom of the defect.)

 Oleg's magic was devised precisely to overcome the defect; see the threads
 http://www.haskell.org/pipermail/haskell/2009-January/020963.html
 http://www.haskell.org/pipermail/haskell/2009-January/020978.html

 (Oleg points out that the elaborate TypeCast mechanism can be simplified
 by using the a~b syntax available in GHC 6.10.  I use the elaborate
 alternative because its syntax is supported more widely.)

 The bottom line is that Hugs and GHC infer types differently  under
 the "same" type extensions.  The difference needs to be sorted out,
 for the sake of Haskell' if not for me.  Barring arcane reasons to the
 contrary, I incline towards GHC's approach, because it allows the
 programmer to place more of the burden of type inference on the compiler,
 so as to unclutter his mind and his code

 Doug McIlroy

 doug at cs.dartmouth.edu

-- 
Ticket URL: <http://hackage.haskell.org/trac/hugs/ticket/89#comment:2>
Hugs <http://www.haskell.org/hugs/>
Hugs 98, an interpreter for Haskell


More information about the Hugs-Bugs mailing list