] Non-termination due to context
|
| Hello all!
|
| Consider the following program:
|
| {-# LANGUAGE FlexibleInstances, OverlappingInstances, UndecidableInstances #-}
|
| class B a = A a
|
| instance A Int
|
| class Eq a = B a
|
| instance (A a, Eq a) = B a
|
| eq :: B a = a - a - Bool
Hello all!
Consider the following program:
{-# LANGUAGE FlexibleInstances, OverlappingInstances, UndecidableInstances #-}
class B a = A a
instance A Int
class Eq a = B a
instance (A a, Eq a) = B a
eq :: B a = a - a - Bool
eq = (==)
test = 1 `eq` (2::Int)
(This is a condensed version of
On Fri, Jan 22, 2010 at 12:24:37PM +0100, Emil Axelsson wrote:
Consider the following program:
{-# LANGUAGE FlexibleInstances, OverlappingInstances, UndecidableInstances
#-}
class B a = A a
instance A Int
class Eq a = B a
instance (A a, Eq a) = B a
[...]
Although I don't know all
Ross Paterson r...@soi.city.ac.uk writes:
I'm afraid you voided the warranty when you used UndecidableInstances.
I like this term of phrase. Maybe it should be used in the actual
documentation? ;-)
--
Ivan Lazar Miljenovic
ivan.miljeno...@gmail.com
IvanMiljenovic.wordpress.com
Ross Paterson skrev:
On Fri, Jan 22, 2010 at 12:24:37PM +0100, Emil Axelsson wrote:
Consider the following program:
{-# LANGUAGE FlexibleInstances, OverlappingInstances, UndecidableInstances #-}
class B a = A a
instance A Int
class Eq a = B a
instance (A a, Eq a) = B a
[...]
Although I
| To: Haskell Cafe
| Subject: [Haskell-cafe] Non-termination due to context
|
| Hello all!
|
| Consider the following program:
|
| {-# LANGUAGE FlexibleInstances, OverlappingInstances, UndecidableInstances
#-}
|
| class B a = A a
|
| instance A Int
|
| class Eq a = B a
|
| instance (A a, Eq a) = B
Here's the relevant core for this file (GHC 6.10.4, so I'm a bit out of date):
Rec {
$dB_rh6 :: Undec.B GHC.Types.Int
[GlobalId]
[]
$dB_rh6 = $dB_rh6
end Rec }
Undec.test :: GHC.Bool.Bool
[GlobalId]
[]
Undec.test =
GHC.Classes.==
@ GHC.Types.Int
($dB_rh6
`cast` ((Undec.:Co:TB)