Admin message

Due to a large amount of spam we do not allow new users to create repositories, they are "external" users. If you are a new user and want to create a repository, for example for forking GHC, open a new issue on ghc/ghc using the "get-verified" issue template

Coercible constraints should be picked arbitrarily
## Summary `Coercible` constraints should be picked arbitrarily, in the absence of other, computationally-relevant constraints. ## Steps to reproduce Consider the following program. {-# LANGUAGE TypeApplications #-} import Data.IntMap (IntMap, mapKeysMonotonic, Key) import Data.Coerce (coerce) newtype MyMap = MyMap (IntMap Bool) doesn'tWork :: (Key -> Key) -> MyMap -> MyMap doesn'tWork = coerce mapKeysMonotonic works :: (Key -> Key) -> MyMap -> MyMap works = coerce (mapKeysMonotonic @Bool) `mapKeysmonotonic` has type (Key -> Key) -> IntMap a -> IntMap a and we attempt to coerce it to type (Key -> Key) -> MyMap -> MyMap since `MyMap` is a `newtype` around `IntMap Bool` this ends up generating the constraint Coercible a Bool and there is no way to specify that constraint given that `a` doesn't otherwise appear in the top-level type. Hence `doesn'tWork` will not type check. If I force the type of `a` to be `Bool` using a `TypeApplication` then it does type check (works). But is this a missing feature of GHC's Coercible system? Since a is not otherwise constrained is it not valid for GHC to choose it to be `Bool`? Coercible instances contain no observable content so no observable behaviour could depend on the particular choice of `Coercible a Bool` instance, and choosing `a ~ Bool` is the natural one. ([Discussed earlier on haskell-cafe](https://mail.haskell.org/pipermail/haskell-cafe/2022-January/135035.html)) ## Expected behavior GHC picks `a ~ Bool`. ## Environment GHC 8.10, 9.2
issue