do's and error messages

Simon Peyton-Jones simonpj@microsoft.com
Mon, 16 Jul 2001 09:48:46 -0700


Here's an example:

	f x =3D do { "c" ; putStrLn "x"; return () }

Test.hs:3:
    Couldn't match `[]' against `IO'
	Expected type: [t]
	Inferred type: IO ()
    In the application `putStrLn "x"'
    in a `do' expression pattern binding: putStrLn "x"


I don't see an easy way to improve this.  I suppose we could
do some kind of "voting" thing, where we take a majority view about=20
what the result type constructor of the monad is... but that would
take a bit of work.

Hmm.    It's a good point, but I'm inclined to wait until there are more
yells before investing effort here. =20

Simon

| -----Original Message-----
| From: George Russell [mailto:ger@tzi.de]=20
| Sent: 16 July 2001 15:56
| To: glasgow-haskell-users@haskell.org
| Subject: do's and error messages
|=20
|=20
| If you have a type error message at the very start of a "do"=20
| statement, the result can be rather confusing, because the=20
| typechecker doesn't "know" that do's are almost always have=20
| type (IO (something)) and so tries to shoehorn the monad to=20
| fit the type.  This has actually happened to me several=20
| times; the worst case is when the result is (for example) a=20
| list, which allows the error to propagate further.  Is there=20
| some way of doing something about this?
|=20
| _______________________________________________
| Glasgow-haskell-users mailing list=20
| Glasgow-haskell-users@haskell.org=20
| http://www.haskell.org/mailman/listinfo/glasgow-| haskell-users
|=20