Skip to content

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 Qs (taus). 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 Cts more expressive.

Have a look at: Allow multiple case branches to have a higher rank type

Edited by Artin Ghasivand