Commit d99fcc16 authored by eir@cis.upenn.edu's avatar eir@cis.upenn.edu Committed by thoughtpolice
Browse files

Test #6147, which was fixed with the roles commit.

(cherry picked from commit 9e0c1ae5)
parent c0329679
{-# LANGUAGE GeneralizedNewtypeDeriving, TypeFamilies #-}
module T6147 where
data family T a
data instance T Int = T_Int Int
class C a where
foo :: a -> T a
instance C Int where
foo = T_Int
newtype Foo = Foo Int deriving(C)
T6147.hs:13:32:
Could not coerce from ‛T Int’ to ‛T Foo’
because the first type argument of ‛T’ has role Nominal,
but the arguments ‛Int’ and ‛Foo’ differ
arising from the coercion of the method ‛foo’ from type
‛Int -> T Int’ to type ‛Foo -> T Foo’
Possible fix:
use a standalone 'deriving instance' declaration,
so you can specify the instance context yourself
When deriving the instance for (C Foo)
......@@ -48,3 +48,4 @@ test('T7148', normal, compile_fail, [''])
test('T7148a', normal, compile_fail, [''])
test('T7800', normal, multimod_compile_fail, ['T7800',''])
test('T5498', normal, compile_fail, [''])
test('T6147', normal, compile_fail, [''])
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment