Skip to content

Control.Monad.Trans.AnyCont fails to type check with GHC >= 9.0 #390

@sternenseemann

Description

@sternenseemann

Tested with llvm-9 branch.

[  1 of 116] Compiling Control.Monad.Trans.AnyCont ( src/Control/Monad/Trans/AnyCont.hs, /home/lukas/src/hs/llvm-hs/dist-newstyle/build/x86_64-linux/ghc-9.0.2/llvm-hs-9.0.1.1/build/Control/Monad/Trans/AnyCont.o, /home/lukas/src/hs/llvm-hs/dist-newstyle/build/x86_64-linux/ghc-9.0.2/llvm-hs-9.0.1.1/build/Control/Monad/Trans/AnyCont.dyn_o )

src/Control/Monad/Trans/AnyCont.hs:15:34: error:
    • Couldn't match type: forall r1. ContT r1 m a
                     with: ContT r m a
      Expected: AnyContT m a -> ContT r m a
        Actual: AnyContT m a -> forall r. ContT r m a
    • In the second argument of ‘(.)’, namely ‘unAnyContT’
      In the first argument of ‘($)’, namely ‘fmap f . unAnyContT’
      In the second argument of ‘($)’, namely ‘fmap f . unAnyContT $ p’
    • Relevant bindings include
        p :: AnyContT m a
          (bound at src/Control/Monad/Trans/AnyCont.hs:15:10)
        f :: a -> b (bound at src/Control/Monad/Trans/AnyCont.hs:15:8)
        fmap :: (a -> b) -> AnyContT m a -> AnyContT m b
          (bound at src/Control/Monad/Trans/AnyCont.hs:15:3)
   |
15 |   fmap f p = AnyContT $ fmap f . unAnyContT $ p
   |                                  ^^^^^^^^^^

src/Control/Monad/Trans/AnyCont.hs:22:39: error:
    • Couldn't match type: forall r1. ContT r1 m b
                     with: ContT r m b
      Expected: AnyContT m b -> ContT r m b
        Actual: AnyContT m b -> forall r. ContT r m b
    • In the first argument of ‘(.)’, namely ‘unAnyContT’
      In the second argument of ‘(>>=)’, namely ‘unAnyContT . k’
      In the second argument of ‘($)’, namely ‘f >>= unAnyContT . k’
    • Relevant bindings include
        k :: a -> AnyContT m b
          (bound at src/Control/Monad/Trans/AnyCont.hs:22:18)
        f :: forall r. ContT r m a
          (bound at src/Control/Monad/Trans/AnyCont.hs:22:12)
        (>>=) :: AnyContT m a -> (a -> AnyContT m b) -> AnyContT m b
          (bound at src/Control/Monad/Trans/AnyCont.hs:22:14)
   |
22 |   AnyContT f >>= k = AnyContT $ f >>= unAnyContT . k
   |                                       ^^^^^^^^^^

src/Control/Monad/Trans/AnyCont.hs:41:15: error:
    • Couldn't match type: (a0 -> m0 r0) -> m0 r0
                     with: forall r. (a -> m r) -> m r
      Expected: AnyContT m a -> forall r. (a -> m r) -> m r
        Actual: AnyContT m a -> (a0 -> m0 r0) -> m0 r0
    • In the expression: runContT . unAnyContT
      In an equation for ‘runAnyContT’:
          runAnyContT = runContT . unAnyContT
    • Relevant bindings include
        runAnyContT :: AnyContT m a -> forall r. (a -> m r) -> m r
          (bound at src/Control/Monad/Trans/AnyCont.hs:41:1)
   |
41 | runAnyContT = runContT . unAnyContT
   |               ^^^^^^^^^^^^^^^^^^^^^

src/Control/Monad/Trans/AnyCont.hs:41:26: error:
    • Couldn't match type: forall r. ContT r m a
                     with: ContT r0 m0 a0
      Expected: AnyContT m a -> ContT r0 m0 a0
        Actual: AnyContT m a -> forall r. ContT r m a
    • In the second argument of ‘(.)’, namely ‘unAnyContT’
      In the expression: runContT . unAnyContT
      In an equation for ‘runAnyContT’:
          runAnyContT = runContT . unAnyContT
    • Relevant bindings include
        runAnyContT :: AnyContT m a -> forall r. (a -> m r) -> m r
          (bound at src/Control/Monad/Trans/AnyCont.hs:41:1)
   |
41 | runAnyContT = runContT . unAnyContT
   |                          ^^^^^^^^^^

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions