[GHC] #12553: Reference kind in a type instance declaration defined in another instance declaration
GHC
ghc-devs at haskell.org
Tue Aug 30 19:52:01 UTC 2016
#12553: Reference kind in a type instance declaration defined in another instance
declaration
-------------------------------------+-------------------------------------
Reporter: Iceland_jack | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.0.1
Resolution: | Keywords: TypeInType
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by Iceland_jack):
Interesting! this works
{{{#!hs
class Syntactic a where
type Domain a :: Sig u -> Type
type Internal a :: u
a :: Proxy (Domain a)
b :: Proxy (Internal a)
-- c :: AST (Domain a) (Full (Internal a))
}}}
but for some reason the method `c` breaks it.
----
Functional dependencies solve this, but they change the API in a way that
doesn't work for me:
{{{#!hs
class Syntactic a (dom :: Sig u -> Type) | a -> dom where
type Internal a :: u
desugar :: ASTF dom (Internal a) -> a
sugar :: a -> ASTF dom (Internal a)
instance Syntactic (AST dom (Full a)) dom where
type Internal (AST dom (Full a)) = a
desugar = id
sugar = id
}}}
----
Here is another workaround, it's not perfect (need to recover `Domain`,
`Internal`) but it's a start
{{{#!hs
class Syntactic a where
type DomainInternal a :: Type
desugar :: DomainInternal a -> a
sugar :: a -> DomainInternal a
instance Syntactic (AST dom (Full a)) where
type DomainInternal (AST dom (Full a)) = AST dom (Full a)
desugar x = x
sugar x = x
}}}
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/12553#comment:5>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list