[GHC] #9574: GHC Panic: No Skolem Info

GHC ghc-devs at haskell.org
Thu Sep 11 08:32:45 UTC 2014


#9574: GHC Panic: No Skolem Info
-------------------------------------+-------------------------------------
              Reporter:  ian_mi      |            Owner:
                  Type:  bug         |           Status:  new
              Priority:  normal      |        Milestone:
             Component:  Compiler    |          Version:  7.9
            Resolution:              |         Keywords:
      Operating System:              |     Architecture:  Unknown/Multiple
  Unknown/Multiple                   |       Difficulty:  Unknown
       Type of failure:              |       Blocked By:
  None/Unknown                       |  Related Tickets:
             Test Case:              |
              Blocking:              |
Differential Revisions:              |
-------------------------------------+-------------------------------------

Old description:

> GHC 7.8.3 and from git both panic with
>
>     Couldn't match kind ‘o1’ with ‘(,) o o’
>       ‘o1’ is untouchable
>         inside the constraints (Object (c :><: c) a)
>         bound by a type expected by the context:
>                    Object (c :><: c) a =>
>                    Tagged a (c (FMap (ProductF c) a) (FMap (Proj2 c c)
> a))
>         at Product.hs:35:9-15ghc: panic! (the 'impossible' happened)
>   (GHC version 7.9.20140908 for x86_64-unknown-linux):
>         No skolem info: o1_a6XS
>
> I have not yet attempted to reduce the problem at all. The offending code
> is the use of fmap here:
>
> {{{#!hs
> proj2 :: forall (c :: o -> o -> *). ProductCategory c => NatTr (c :><: c)
> c (ProductF c) (Proj2 c c)
> proj2 = NatTr t where
>     NatTr t = fmap (CompF Proj2 IdentityF) e
>     e :: NatTr (c :><: c) (c :><: c) (Comp ('KProxy :: KProxy o) (Diag c)
> (ProductF c)) (IdentityF (c :><: c))
>     e = counit
> }}}
>
> fmap is defined as
>
> {{{#!hs
> fmap :: forall f (a :: o1) (b :: o1). Functor f ('KProxy :: KProxy (o1 ->
> o2)) => f -> Domain f a b -> Codomain f (FMap f a :: o2) (FMap f b :: o2)
> fmap _ = proxy morphMap (Proxy :: Proxy f)
> }}}
>
> while CompF is defined by
>
> {{{#!hs
> data CompF f g (k :: KProxy (o3 -> o4, o1 -> o2)) where
>     CompF :: (Functor f ('KProxy :: KProxy (o3 -> o4)), Functor g
> ('KProxy :: KProxy (o1 -> o2))) =>
>         f -> g -> CompF f g ('KProxy :: KProxy (o3 -> o4, o1 -> o2))
> }}}
>
> This makes some sense because there is a functional dependency between
> the functor and the kind proxy.

New description:

 GHC 7.8.3 and from git both panic with
 {{{
     Couldn't match kind ‘o1’ with ‘(,) o o’
       ‘o1’ is untouchable
         inside the constraints (Object (c :><: c) a)
         bound by a type expected by the context:
                    Object (c :><: c) a =>
                    Tagged a (c (FMap (ProductF c) a) (FMap (Proj2 c c) a))
         at Product.hs:35:9-15ghc: panic! (the 'impossible' happened)
   (GHC version 7.9.20140908 for x86_64-unknown-linux):
         No skolem info: o1_a6XS
 }}}
 I have not yet attempted to reduce the problem at all. The offending code
 is the use of fmap here:

 {{{#!hs
 proj2 :: forall (c :: o -> o -> *). ProductCategory c => NatTr (c :><: c)
 c (ProductF c) (Proj2 c c)
 proj2 = NatTr t where
     NatTr t = fmap (CompF Proj2 IdentityF) e
     e :: NatTr (c :><: c) (c :><: c) (Comp ('KProxy :: KProxy o) (Diag c)
 (ProductF c)) (IdentityF (c :><: c))
     e = counit
 }}}

 fmap is defined as

 {{{#!hs
 fmap :: forall f (a :: o1) (b :: o1). Functor f ('KProxy :: KProxy (o1 ->
 o2)) => f -> Domain f a b -> Codomain f (FMap f a :: o2) (FMap f b :: o2)
 fmap _ = proxy morphMap (Proxy :: Proxy f)
 }}}

 while CompF is defined by

 {{{#!hs
 data CompF f g (k :: KProxy (o3 -> o4, o1 -> o2)) where
     CompF :: (Functor f ('KProxy :: KProxy (o3 -> o4)), Functor g ('KProxy
 :: KProxy (o1 -> o2))) =>
         f -> g -> CompF f g ('KProxy :: KProxy (o3 -> o4, o1 -> o2))
 }}}

 This makes some sense because there is a functional dependency between the
 functor and the kind proxy.

--

Comment (by simonpj):

 Clearly a bug, but there's virtually no chance of fixing it without a way
 to reproduce it, alas. So if you felt able to do that, it'd be great.

 Simon

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9574#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list