Type system compiler flags
Daniel Fischer
daniel.is.fischer at googlemail.com
Tue Feb 1 12:34:09 CET 2011
On Tuesday 01 February 2011 11:45:58, Julian Bean wrote:
> > It indeed does, even though I doubted it at first. As far as I
> > remember the type in
> >
> > getnArrayST n bs :: ST s (Maybe (UArray Int Word8, [Word8])) =
> >
> > used to be necessary to bind the type variable s. Apparently things
> > have become easier.
>
> The higher-rank inference has been changed quite a bit, but I think
> -XPatternSignatures is all you were missing to get your original code to
> compiler (well, at least to parse).
No, I tried, the parser still choked on the above signature. You can get
the other one, (a :: STUArray s Int Word8), to be parsed with
PatternSignatures, but
A pattern type signature cannot bind scoped type variables `s'
unless the pattern has a rigid type context
In the pattern: a :: STUArray s Int Word8
In a stmt of a 'do' expression:
(a :: STUArray s Int Word8) <- newArray_ (0, n - 1)
In the expression:
do { (a :: STUArray s Int Word8) <- newArray_ (0, n - 1);
let loop k bs
| k == n = ...
| k < n = ...;
loop 0 bs }
even if you remove the forall from getnArrayST's type signature. I don't
know why `s' is a scoped type variable without the forall and
ScopedTypeVariables, but that's what 6.12.3 says. 7.0.1 complains about
No instance for (MArray (STUArray s) Word8 (ST s1))
which I understand.
>
> Jules
More information about the Glasgow-haskell-users
mailing list