[GHC] #14231: Core lint error "in result of Static argument"

GHC ghc-devs at haskell.org
Wed Jul 4 07:11:01 UTC 2018


#14231: Core lint error "in result of Static argument"
-------------------------------------+-------------------------------------
        Reporter:  mpickering        |                Owner:  (none)
            Type:  bug               |               Status:  new
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:  8.5
      Resolution:                    |             Keywords:
                                     |  StaticArgumentTransformation
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------
Description changed by osa1:

Old description:

> Whilst investigating #14211 I encountered a core lint error.
>
> {{{
> {-# LANGUAGE CPP                       #-}
> {-# LANGUAGE RankNTypes                #-}
>
> module Async where
>
> data AsyncT m a =
>     AsyncT {
>         runAsyncT :: forall r.
>                Maybe Int                          -- state
>             -> m r                                          -- stop
>             -> (a -> Maybe Int -> Maybe (AsyncT m a) -> m r)  -- yield
>             -> m r
>     }
>
> ------------------------------------------------------------------------------
> -- Monad
> ------------------------------------------------------------------------------
>
> {-# INLINE bindWith #-}
> bindWith
>     :: (forall c. AsyncT m c -> AsyncT m c -> AsyncT m c)
>     -> AsyncT m a
>     -> (a -> AsyncT m b)
>     -> AsyncT m b
> bindWith k (AsyncT m) f = AsyncT $ \_ stp yld ->
> m Nothing stp (\a _ m -> (\x -> (runAsyncT x) Nothing stp yld) $ maybe (f
> a) (\r -> f a `k` (bindWith k r f)) m )
> }}}
>
> Compile with `ghc -O2 -fno-worker-wrapper -fstatic-argument-
> transformation -dcore-lint`.
>
> Error:
> {{{
> *** Core Lint errors : in result of Static argument ***
> <no location info>: warning:
> In the expression: bindWith @ m_aV5 @ a_aV6 @ b_aV7 k_aSU x_aX3 f_aSW
>     Mismatch in type between binder and occurrence
>     Var: bindWith_rpi
>     Binder type: forall (m1 :: * -> *) a1 b1 .
>
>     (forall c .   AsyncT m_aV5 c -> AsyncT m_aV5 c -> AsyncT m_aV5 c)
>     -> AsyncT m_aV5 a_aV6 -> (a_aV6 -> AsyncT m_aV5 b_aV7) -> AsyncT
> m_aV5 b_aV7
>     Occurrence type: forall (m :: * -> *) a b .
>
>     (forall c .   AsyncT m c -> AsyncT m c -> AsyncT m c)
>     -> AsyncT m a -> (a -> AsyncT m b) -> AsyncT m b
>       Before subst: forall (m :: * -> *) a b .
>
>     (forall c .   AsyncT m c -> AsyncT m c -> AsyncT m c)
>     -> AsyncT m a -> (a -> AsyncT m b) -> AsyncT m b
> *** Offending Program ***
> }}}

New description:

 Whilst investigating #14211 I encountered a core lint error.

 {{{
 {-# LANGUAGE CPP                       #-}
 {-# LANGUAGE RankNTypes                #-}

 module Async where

 data AsyncT m a =
     AsyncT {
         runAsyncT :: forall r.
                Maybe Int                          -- state
             -> m r                                          -- stop
             -> (a -> Maybe Int -> Maybe (AsyncT m a) -> m r)  -- yield
             -> m r
     }

 ------------------------------------------------------------------------------
 -- Monad
 ------------------------------------------------------------------------------

 {-# INLINE bindWith #-}
 bindWith
     :: (forall c. AsyncT m c -> AsyncT m c -> AsyncT m c)
     -> AsyncT m a
     -> (a -> AsyncT m b)
     -> AsyncT m b
 bindWith k (AsyncT m) f = AsyncT $ \_ stp yld ->
   m Nothing stp (\a _ m -> (\x -> (runAsyncT x) Nothing stp yld) $ maybe
 (f a) (\r -> f a `k` (bindWith k r f)) m )
 }}}

 Compile with `ghc -O2 -fno-worker-wrapper -fstatic-argument-transformation
 -dcore-lint`.

 Error:
 {{{
 *** Core Lint errors : in result of Static argument ***
 <no location info>: warning:
 In the expression: bindWith @ m_aV5 @ a_aV6 @ b_aV7 k_aSU x_aX3 f_aSW
     Mismatch in type between binder and occurrence
     Var: bindWith_rpi
     Binder type: forall (m1 :: * -> *) a1 b1 .

     (forall c .   AsyncT m_aV5 c -> AsyncT m_aV5 c -> AsyncT m_aV5 c)
     -> AsyncT m_aV5 a_aV6 -> (a_aV6 -> AsyncT m_aV5 b_aV7) -> AsyncT m_aV5
 b_aV7
     Occurrence type: forall (m :: * -> *) a b .

     (forall c .   AsyncT m c -> AsyncT m c -> AsyncT m c)
     -> AsyncT m a -> (a -> AsyncT m b) -> AsyncT m b
       Before subst: forall (m :: * -> *) a b .

     (forall c .   AsyncT m c -> AsyncT m c -> AsyncT m c)
     -> AsyncT m a -> (a -> AsyncT m b) -> AsyncT m b
 *** Offending Program ***
 }}}

--

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


More information about the ghc-tickets mailing list