Skip to content

Equality test operations are not levity polymorphic

Summary

We currently have

sameArray# :: Array# a -> Array# a -> Int#
sameMutableArray# :: MutableArray# s a -> MutableArray# s a -> Int#
sameSmallArray# :: SmallArray# a -> SmallArray# a -> Int#
sameSmallMutableArray# :: SmallMutableArray# s a -> SmallMutableArray# s a -> Int#
sameMutVar# :: MutVar# s a -> MutVar# s a -> Int#
sameTVar# :: TVar# s a -> TVar# s a -> Int#
sameMVar# :: MVar# s a -> MVar# s a -> Int#
sameIOPort# :: IOPort# s a -> IOPort# s a -> Int#
eqStableName# :: StableName# a -> StableName# b -> Int#

That's very odd. Surely we should have, for example,

sameArray# :: forall {l :: Levity} (a :: TYPE ('BoxedRep l)). Array# a -> Array# a -> Int#

Environment

  • GHC version used: 9.6

Optional:

  • Operating System:
  • System Architecture:
Edited by David Feuer
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information