[Haskell-cafe] asserting the type of a binding in a "do"
expression
Philip Weaver
philip.weaver at gmail.com
Sat Apr 26 13:34:15 EDT 2008
On Fri, Apr 25, 2008 at 11:49 PM, Brandon S. Allbery KF8NH
<allbery at ece.cmu.edu> wrote:
>
> On Apr 26, 2008, at 2:36 , Ken Takusagawa wrote:
>
>
> > But this does not:
> >
> > foo::IO a;
> > foo = do{
> > (x::a) <- bar;
> > return x;};
> >
> > Error message: A pattern type signature cannot bind scoped type
> > variables `a' unless the pattern has a rigid type context.
> >
>
Yeah, using the "forall" is exactly what you want to fix this problem.
It puts the type variable in scope throughout the definition of the
function.
> This works for me (in a slightly out of date HEAD) if I explicitly forall
> the declaration as per the ghc manual (see section 8.7.6.3):
>
> > bar :: forall b. IO b
> > bar = return undefined -- just want a type for now
> > foo :: forall a. IO a
>
> > foo = do { (x :: a) <- bar; return x; }
>
> --
> brandon s. allbery [solaris,freebsd,perl,pugs,haskell] allbery at kf8nh.com
> system administrator [openafs,heimdal,too many hats] allbery at ece.cmu.edu
> electrical and computer engineering, carnegie mellon university KF8NH
>
>
>
>
> _______________________________________________
> 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