[Haskell-cafe] type-level integers using type families

Peter Gavin pgavin at gmail.com
Sat May 31 11:32:52 EDT 2008

Roberto Zunino wrote:
> Manuel M T Chakravarty wrote:
>> Peter Gavin:
>>> will work if the non-taken branch can't be unified with anything.  Is
>>> this planned? Is it even feasible?
>> I don't think i entirely understand the question.
> Maybe he wants, given
>   cond :: Cond x y z => x -> y -> z
>   tt :: True
>   true_exp  :: a
>   false_exp :: <<<untypable>>>
> that
>   cond tt true_exp false_exp :: a
> That is the type of false_exp is "lazily inferred", so that type errors
> do not make inference fail if they show up in an unneeded place.

Yes, that's exactly what I want, but for type families (not MPTC). I 
think it could be done if the type arguments were matched one at a time, 
across all visible instances.

So given

 > data True
 > data False
 > type family Cond x y z
 > type instance Cond True y z = y
 > type instance Cond False y z = z

the first argument (x) of Cond would be matched before y and z are 
inferred. Then if x is True, the type checker would see that z is never 
used on the RHS, so it would not bother trying to infer it at all.

> If we had subtyping, typing that as Top would suffice, I believe.
> Zun.

More information about the Haskell-Cafe mailing list