[GHC] #10905: Incorrect number of parameters in "role" errors
GHC
ghc-devs at haskell.org
Mon Sep 21 15:56:23 UTC 2015
#10905: Incorrect number of parameters in "role" errors
-------------------------------------+-------------------------------------
Reporter: crockeea | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.10.2
Keywords: roles | Operating System: Unknown/Multiple
Architecture: | Type of failure: Incorrect
Unknown/Multiple | warning at compile-time
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Revisions: |
-------------------------------------+-------------------------------------
The following code produces the error:
{{{
import Data.Coerce
import Data.Functor.Trans.Tagged
toTT :: Tagged t [a] -> TaggedT t [] a
toTT = coerce
}}}
{{{
Couldn't match representation of type ‘[a]’
with that of ‘Data.Functor.Identity.Identity
[a]’
arising from trying to show that the representations of
‘Tagged t [a]’ and
‘TaggedT t [] a’ are the same
Relevant role signatures:
type role [] representational
type role Data.Functor.Identity.Identity representational
type role TaggedT nominal nominal phantom representational nominal
The data constructor ‘Data.Functor.Identity.Identity’
of newtype ‘Data.Functor.Identity.Identity’ is not in scope
Relevant bindings include
toTT :: Tagged t [a] -> TaggedT t [] a (bound at Main.hs:9:1)
In the expression: coerce
In an equation for ‘toTT’: toTT = coerce
}}}
First, kudos for correctly identifying the problem: I failed to import the
`Identity` constructor.
However, it seems that the report for the roles of the `TaggedT` type has
too many parameters. It is defined in tagged-transformer
[https://hackage.haskell.org/package/tagged-transformer-0.8/docs/Data-
Functor-Trans-Tagged.html] as `newtype TaggedT s m b = TagT { untagT :: m
b }`, but is listed with 5 roles.
I did try to move the definition of `TaggedT/Tagged` into my module so I
didn't have to import the library, but when I did the error didn't show
up: TaggedT was listed with the expected roles `phantom representational
nominal`.
As a user, it wasn't clear to me why there are 5 roles listed for a type
with 3 parameters, and I didn't know which roles I should be looking at to
help me debug the `coerce` error.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10905>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list