[Haskell-cafe] Why can't we make an instance declaration on a type synonym?

Conor McBride conor at strictlypositive.org
Sun Jan 3 04:37:05 EST 2010





On 3 Jan 2010, at 05:18, Daniel Fischer <daniel.is.fischer at web.de>  
wrote:

> Am Sonntag 03 Januar 2010 05:37:31 schrieb Jason Dusek:
> > Well, you can, with:
> >
> > -XTypeSynonymInstances
> >
> > though I'm not sure it addresses your specific need.
> Doesn't help him here, he would need
> instance Monad (State s) where ...
> but that would be a partially applied type synonym. He would also  
> need type level lambdas,
> type State s = /\ a -> (s -> (a,s))
> But type level lambdas and partially applied type synonyms make type  
> inference undecidable if I remember correctly (if it wasn't that,  
> they'd have other dire consequences).

Type inference is undecidable already. It's still extremely useful,  
cut with just enough type annotation and checking to resolve  
ambiguities. That creates a bunch of trade-offs to negotiate and a  
design space to explore.

Lots of dependent type systems have type-level lambda (that is, they  
have lambda), undecidable type inference, decidable type checking, and  
substantial (but inadequately rationalised) facilities for suppressing  
and recovering boring details. Nobody's campaigning to kick type-level  
lambda out of Agda.

Adding type-level lambda to Haskell would amount to admitting the  
awful truth: application is not injective. When you write a do-program  
of type t, you need to solve a constraint m x = t for m and x, to  
figure out which monad to plumb in. Pretending application is  
injective makes this easy, at the cost of requiring lots of wrapper- 
types. Type-level lambda makes this constraint highly ambiguous: Maybe  
Int is also (\ x -> x) (Maybe Int), the type of a computation in the  
identity monad. To cope, we'd need a new way to be signal such  
decompositions. Worth thinking about, perhaps, but certainly a Big Deal.

Type-level lambda is not inherently disastrous. It's just a poor fit  
with Haskell's current design.

Cheers

Conor



> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe


More information about the Haskell-Cafe mailing list