[GHC] #10797: Kind-level functional dependencies are not resolved properly
GHC
ghc-devs at haskell.org
Wed Aug 26 18:49:49 UTC 2015
#10797: Kind-level functional dependencies are not resolved properly
-------------------------------------+-------------------------------------
Reporter: danilo2 | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.10.2
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Revisions:
-------------------------------------+-------------------------------------
Description changed by danilo2:
Old description:
> Hello! Let's consider such funny class and its instances.
>
> {{{
> {-# LANGUAGE PolyKinds #-}
> ...
>
> class BaseType (a :: k) (b :: l) | a -> b, k -> l where
> baseType :: Proxy a -> Proxy b
>
> instance BaseType (a :: j -> k) (out :: l) => BaseType (a (t ::
> j) :: k) (out :: l)
> }}}
>
> The instance does not compile:
> {{{
> Illegal instance declaration for ‘BaseType (a t) out’
> The liberal coverage condition fails in class ‘BaseType’
> for functional dependency: ‘k -> l’
> Reason: lhs type ‘k’ does not determine rhs type ‘l’
> In the instance declaration for
> ‘BaseType (a (t :: j) :: k) (out :: l)’
> }}}
>
> While the LHS determines the RHS. The problem is that it seems, that GHC
> doesn't infer the functional dependency of {{{k ~> l}}} from the
> dependency {{{j -> k ~> l}}}.. I've used a {{{~>}}} arrow to indicate
> fundeps. Is this a bug or am I missing something?
New description:
Hello! Let's consider such funny class and its instances.
{{{
{-# LANGUAGE PolyKinds #-}
...
class BaseType (a :: k) (b :: l) | a -> b, k -> l where
baseType :: Proxy a -> Proxy b
instance BaseType (a :: j -> k) (out :: l) => BaseType (a (t :: j) :: k)
(out :: l)
}}}
The instance does not compile:
{{{
Illegal instance declaration for ‘BaseType (a t) out’
The liberal coverage condition fails in class ‘BaseType’
for functional dependency: ‘k -> l’
Reason: lhs type ‘k’ does not determine rhs type ‘l’
In the instance declaration for
‘BaseType (a (t :: j) :: k) (out :: l)’
}}}
While the LHS determines the RHS. The problem is that it seems, that GHC
doesn't infer the functional dependency of {{{k ~> l}}} from the
dependency {{{j -> k ~> l}}}.. I've used a {{{~>}}} arrow to indicate
fundeps. Is this a bug or am I missing something?
--
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10797#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list