Thank you Simon.

But I am still confused by the exact definition of coherence in the case of overlapping. Does the standard coherence theorem apply? If yes, how? If no, is there a theorem?

Is there any write-up on this?

Thanks.

--william

From: "Simon Peyton-Jones" <[EMAIL PROTECTED]>
To: "william kim" <[EMAIL PROTECTED]>,<haskell-cafe@haskell.org>
Subject: RE: [Haskell-cafe] coherence when overlapping?
Date: Wed, 12 Apr 2006 17:43:33 +0100

| In the GHC documentation which describes the extension of overlapping
| instances, an example similar to the following is given.
|
| >class C a where
| >   f:a -> a
| >instance C Int where
| >   f=e1
| >instance C a where
| >   f=e2
| >
| >let g x = f x
| >in g 1
|
| In this case GHC takes an ¡°incoherent¡± decision by taking the second
| instance as an instantiation of function f even it is executed with an input
| of type Int.

No it doesn't (ghc 6.4.1). I've just tried it. It uses the C Int instance, for exactly the reason you describe.

There is a flag -fallow-incoherent-instances that _does_ allow incoherence

Simon


{-# OPTIONS -fallow-overlapping-instances -fglasgow-exts -fallow-undecidable-instances #-}

module Main where

class C a where
   f::a -> a
instance C Int where
   f x = x+1
instance C a where
   f x = x

main = print (let g x = f x
              in g (1::Int))


_________________________________________________________________
Download MSN Messenger emoticons and display pictures. http://ilovemessenger.msn.com/?mkt=en-sg

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

Reply via email to