Problems getting information and kind from GHC.Prim ~#, ~R#, ...
>>> import GHC.Prim
>>> :bro GHC.Prim
[...]
type role (~#) nominal nominal
data (~#) (t3 :: a) (t4 :: b)
type role ~P# phantom phantom
data ~P# (t3 :: a) (t4 :: b)
type role (~R#) representational representational
data (~R#) (t3 :: a) (t4 :: b)
getting the kind of ~, ~#, ~~ works fine:
>>> import GHC.Prim
>>> import GHC.Types
>>> :kind (~)
(~) :: k -> k -> Constraint
>>> :kind (~#)
(~#) :: a -> b -> TYPE 'VoidRep
>>> :kind (~~)
(~~) :: j -> k -> Constraint
but # gets incorrectly treated as an operator in ~R# and ~P#:
>>> :kind (~R#)
<interactive>:1:3: error:
Illegal operator ‘#’ in type ‘~R #’
Use TypeOperators to allow operators in types
<interactive>:1:3: error:
Operator applied to too few arguments: ~R #
<interactive>:1:4: error:
Not in scope: type constructor or class ‘R’
Furthermore while running :info on ~~ and ~# works fine
>>> :info (~~)
class a ~# b => (~~) (a :: j) (b :: k) -- Defined in ‘GHC.Types’
>>> :info (~#)
type role (~#) nominal nominal
data (~#) (t3 :: a) (t4 :: b)
-- Defined in ‘GHC.Prim’
the others don't parse
>>> :info (~)
<interactive>:1:2: error: parse error on input ‘~’
>>> :info (~R#)
<interactive>:1:2: error: parse error on input ‘~’
>>> :info (~P#)
<interactive>:1:2: error: parse error on input ‘~’
Trac metadata
| Trac field | Value |
|---|---|
| Version | 7.10.3 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | GHCi |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |