Hi Don.

Don Stewart wrote:
alexander.fuchs:

In a happy parser I have this code 1):

%monad { Parsed } { thenP } { returnP }

type Parsed = State Env.Env

returnP :: a -> Parsed a
returnP a = return a

thenP :: Parsed a -> (a -> Parsed b) -> Parsed b
thenP x k = x >>= k


An alternative was this 2) (yes, redundant in happy):

returnP :: a -> Parsed a
returnP = return

thenP :: Parsed a -> (a -> Parsed b) -> Parsed b
thenP = (>>=)


Could you submit a minimal, complete grammar file, so
we can look at the generated code?

After reducing and simplifying the grammar file to the minimum for my sample input I can't see any difference in performance anymore. Due to other code changes the difference is almost non-existent anymore even before simplification. I blame laziness for my lack of intuition of what is going on ;-)


Anyway, as I am still wondering why ghc creates different code for
  returnP a = return a
  returnP = return

I put the grammar file online, in case you still want to have a look at it:
http://cs.uiowa.edu/~fuchs/DarwinCS/DarwinCS/Darwin/Tptp/Parser.y

The complete source (compiles with make opt) is here:
http://cs.uiowa.edu/~fuchs/DarwinCS/DarwinCS.tar.gz

And I use it on this input:
http://cs.uiowa.edu/~fuchs/DarwinCS/SYN854-1.p

with the command line:
time Darwin/Main +RTS -sstderr -RTS 600 SYN854-1.p

Sorry about the noise,
        Alexander

_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to