#1482: unsafeCoerce# doesn't always fully coerce
----------------------------------------+-----------------------------------
    Reporter:  [EMAIL PROTECTED]         |        Owner:         
        Type:  bug                      |       Status:  new    
    Priority:  normal                   |    Milestone:         
   Component:  Compiler (Type checker)  |      Version:  6.6.1  
    Severity:  normal                   |   Resolution:         
    Keywords:  unsafeCoerce#            |   Difficulty:  Unknown
          Os:  Linux                    |     Testcase:         
Architecture:  x86                      |  
----------------------------------------+-----------------------------------
Comment (by sorear):

 Not a bug, but merely an extremely obscure feature of Haskell's type
 system.

 Because unsafeCoerce# does not impose a specific type upon the use of (+)
 or shows, the polymorphic type variable becomes ambiguous.  However, since
 both (+) and shows need to know the actual type of use (due to the
 implicit dictionary argument), this variable needs to be resolved somehow,
 or an error produced.

 Section 4.3.4 of the Haskell 98 Language and Libraries Report (
 [http://haskell.org/onlinereport/decls.html#sect4.3.4] ) specifies that
 ambiguous type variables are resolved using a default list, but only if
 (a) no non-standard classes are used and (b) at least one numeric class is
 used.  The idea behind this was to make numeric code easier, as even 'show
 2' would otherwise result in a type error.  Thus, in Haskell 98 (with a
 unsafeCoerce primitive), the first example is legal and the second is not
 (since defaulting does not apply unless numeric classes are involved.)
 However, even the Haskell98 defaulting rules proved somewhat too onerous
 for REPL-type situations, so GHC provides a -fextended-default-rules flag
 ( [http://haskell.org/ghc/dist/current/docs/users_guide/interactive-
 evaluation.html#extended-default-rules] ) flag to allow more cases,
 including your second one.

 Hopefully this clears things up.

 Stefan

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/1482>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to