Proposal: Don't require users to use undefined
Ian Lynagh
igloo at earth.li
Fri Oct 29 16:09:19 EDT 2010
On Wed, Oct 27, 2010 at 07:57:59PM +0000, 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.
The difference in what "Just" means in (Just 'c') and ((Just @ Char) 'c')
feels a bit wrong to me.
Maybe it would be a better to have a syntax to get something with its
real type, and then use normal application, e.g. currently we have
Just :: forall a . a -> Maybe a
Just :: Char -> Maybe Char
And if #... is the new syntax then:
#Just :: /\ a . a -> Maybe a
#Just Char :: Char -> Maybe Char
Just 'a' == #Just Char 'a'
and also
map ord "foo" == #map Char Int ord "foo"
Thanks
Ian
More information about the Libraries
mailing list