Add support for equalities between sigmas
Currently Ct
is just a Q
tagged with a flavour, and the constraint solver can only handle equalities between Q
s (tau
s). This is very limiting and wouldn't let us infer a rho
for multiple match-expressions. Example:
-- f : Bool -> (forall a. a -> a -> a) -> Bool -> Int -> Bool
f True = \(x :: forall a. a -> a -> a) -> \y -> \(z :: Int) -> True
f False = \(x :: forall a. a -> a -> a) -> \(y :: Bool) -> \z -> True
The above example should be accepted, which will only happen if we make Ct
s more expressive.
Have a look at: Allow multiple case branches to have a higher rank type
Edited by Artin Ghasivand