Skip to content

GHC2021 doesn't imply UnboxedTuples?

Summary

I switched to GHC2021 via cabal-file default-language and I'm getting this complaint in my code:

deriving-trans> [1 of 7] Compiling Control.Monad.Accum.OrphanInstances ( src/Control/Monad/Accum/OrphanInstances.hs, dist/build/Control/Monad/Accum/OrphanInstances.o, dist/build/Control/Monad/Accum/OrphanInstances.dyn_o )
deriving-trans> [2 of 7] Compiling Control.Monad.Select.OrphanInstances ( src/Control/Monad/Select/OrphanInstances.hs, dist/build/Control/Monad/Select/OrphanInstances.o, dist/build/Control/Monad/Select/OrphanInstances.dyn_o )
deriving-trans> [3 of 7] Compiling Control.Monad.Trans.Elevator ( src/Control/Monad/Trans/Elevator.hs, dist/build/Control/Monad/Trans/Elevator.o, dist/build/Control/Monad/Trans/Elevator.dyn_o )
deriving-trans> [4 of 7] Compiling Control.Monad.Trans.Compose.Transparent ( src/Control/Monad/Trans/Compose/Transparent.hs, dist/build/Control/Monad/Trans/Compose/Transparent.o, dist/build/Control/Monad/Trans/Compose/Transparent.dyn_o )
deriving-trans> [5 of 7] Compiling Control.Monad.Trans.Compose ( src/Control/Monad/Trans/Compose.hs, dist/build/Control/Monad/Trans/Compose.o, dist/build/Control/Monad/Trans/Compose.dyn_o )
deriving-trans> src/Control/Monad/Trans/Compose.hs:376:1: error:
deriving-trans>     • Illegal unboxed tuple type as function argument:
deriving-trans>       (# ghc-prim-0.8.0:GHC.Prim.State#
deriving-trans>            (Primitive.PrimState (ComposeT t1 t2 m)),
deriving-trans>          a #)
deriving-trans>       Perhaps you intended to use UnboxedTuples
deriving-trans>     • In the type signature:
deriving-trans>         Primitive.primitive :: forall (a :: *). (ghc-prim:GHC.Prim.State#
deriving-trans>                                                    (Primitive.PrimState (ComposeT t1 t2 m))
deriving-trans>                                                  -> (# ghc-prim:GHC.Prim.State#
deriving-trans>                                                          (Primitive.PrimState (ComposeT t1 t2 m)),
deriving-trans>                                                        a #))
deriving-trans>                                                 -> ComposeT t1 t2 m a
deriving-trans>       When typechecking the code for ‘Primitive.primitive’
deriving-trans>         in a derived instance for ‘Primitive.PrimMonad (ComposeT t1 t2 m)’:
deriving-trans>         To see the code I am typechecking, use -ddump-deriv
deriving-trans>       In the instance declaration for
deriving-trans>         ‘Primitive.PrimMonad (ComposeT t1 t2 m)’
deriving-trans>     |
deriving-trans> 376 | deriving via Elevator (ComposeT t1 t2) m
deriving-trans>     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...

When I manually turn the extension on in the file it works.

Steps to reproduce

Run nix flake check on this commit https://github.com/jumper149/deriving-trans/commit/8ee81ac84df66c06f2b46586cf1eaded57afe7f3 .

Expected behavior

I was expecting the extension UnboxedTuples to be enabled by GHC2021 because of the docs, but it seems like it isn't.

Environment

  • GHC version used: 9.2.4, 9.4.4

Optional:

  • Operating System: NixOS Linux
  • System Architecture: x86_64
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information