[Haskell-cafe] Help a Newbie

Philippa Cowderoy flippa at flippac.org
Fri Feb 20 22:05:32 EST 2004


On Fri, 20 Feb 2004, Matthew Morvant wrote:

> I am trying (and have been for quite some time) to repair a broken Haskel=
l
> script.=A0 I keep getting stuck on =93Last generator in do {...} must be =
an
> expression=94.=A0 I am betting that this is not uncommon.=A0 Can someone =
please
> help me understand?
>
> code5 :: Parser
> code5 =3D do
>          dd <- code3
>          do ddd <- code3
>          do dddd <- code3
>          return "ce"
>

The author appears to want this (braces and semicolons included for
clarity):

code5 =3D do {
            dd <- code3;
            ddd <- code3;
            dddd <- code3;
            return "ce"
           }

which will assign the results of code3 3 times in succession to dd, ddd,
and ddd before returning "ce". Of course, you /could/ just write that as:

do {code3; code 3; code 3; return "ce"}

Unless I misunderstand the intent here?

> code4 :: Parser
> code4 =3D do
> =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 dd <-=
 code3
> =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 do =
dde <- code3
> =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 =A0=
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 digit
> =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 ddd <- many (do digit)
> =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 q <- code5
> =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 return (q : "ss")
>

Attempting to grok this suggests I might. Is code3 supposed to take a
parser as a parameter?

--=20
flippa at flippac.org


More information about the Haskell-Cafe mailing list