Skip to content

Visible forall in class methods

Summary

currently it isn't possible to change the visibility of a quantified type in a class method

a class method with forall tv -> will introduce a new tv visibly quantified type variable named tv even if the class definition contains a tv type variable shadowing the existing one and making the method be ambigously typed

Steps to reproduce

class Bits b where
  bitSize :: forall b -> Int

Expected behavior

actually it is somewhat unclear, a forall tv. also introduces a new variable shadowing the one from the class head but in a constructor the types from the data declaration aren't in scope so you could use forall tv -> if it weren't explicitly disallowed. Basically there should be a way to define a method which works the same as

class Bits b where
  bitSize :: forall a -> a ~ b => Int 

without introducing a new variable, also in the future assuming foreach tv. and foreach tv -> are introduced we probably should be able to control how a class variable is quantified in each method

Environment

  • GHC version used: The Glorious Glasgow Haskell Compilation System, version 9.10.1

Optional:

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