[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: SYNTAX ONLY: let/if/case/lambda and Function Application

                       ***SYNTAX ONLY***
I was quite suprised to see `atype' in the syntax for expression type
signatures in Kevin's proposal:

| exp ->  exp(0,n) [ :: [ context => ] atype]

Then I looked at the current Haskell report and found the same restriction!
Is there any way we can avoid this?  I presume that the main reason for the
restriction is to avoid parsing problems with expressions such as:

         case e1 of somePat | e2 :: Type -> Type -> rhs.

But this also forces me to write id :: (a -> a)  and emptyTree :: (Tree a)
where I'd much rather have  id :: a -> a  and emptyTree :: Tree a.

I imagine this could be fixed by changing `atype' above to `type' and
modifying the syntax of guards to:

  gd -> | exp(0,n)      instead of the current      gd -> | exp.

Is this reasonable?  Would anybody else like to see this change too?