Proposal: Don't require users to use undefined
Sittampalam, Ganesh
ganesh.sittampalam at credit-suisse.com
Thu Oct 28 03:57:21 EDT 2010
Simon Peyton-Jones wrote:
>> Drifting off-topic, but wouldn't we want to be able to use similar
>> syntax to bind types too? e.g.
>>
>> f ((Just @ t) x) = (Right @ String @ t) x
>>
>> but @ is unavailable in patterns.
>
> Oh yes, good point. It'd be particularly useful in existential
> patterns:
>
> data T where
> MkT :: forall a. a -> (a -> Int) -> T
>
> f (MkT @ a x g) = g (x::a)
>
> The idea is that the pattern (MkT @ a x g) brings the type variable
> 'a' into scope. As you point out, though, '@' is already used in
> patterns, but perhaps this use is unambiguous. Confusing though f
> (MkS @ a x@(p,q) z) = ....
>
> Maybe someone else can think of good syntax.
Couldn't this work?
f (MkT (x :: a) g)
In theory one could imagine wanting to write
data T where
MkT :: forall a . Foo a => T
and then some special syntax might be needed, but I can't think of any
real use for this off the top of my head.
But in general the idea of having a whole new syntax for passing types
around makes me a bit nervous; GHC Haskell is already getting quite
syntactically cluttered. We already have machinery for passing around
values and abstracting over them, so if we can use a single well-known
proxy value to pass around types we can reuse that machinery. Couldn't
the typeOf Maybe problem be solved with polymorphic kinds, which would
be nice to have anyway?
===============================================================================
Please access the attached hyperlink for an important electronic communications disclaimer:
http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html
===============================================================================
More information about the Libraries
mailing list