
Hi, I learn Parsec library now. Parsers from all articles which I found at first parse input stream entirely and only then call an eval function. Such method requires to define many data-types for each an element of a language. And I guess that it hard to write bash interpreter with it help. Bash makes immediately its commands. For example: #!/bin/bash echo HEELLO ) echo DDDD dan@tmp$ bash a.sh HEELLO a.sh: line 5: syntax error near unexpected token `)' a.sh: line 5: `)' dan@tmp$ First command of the script is made by bash nonetheless the error in the next line. I want to write a interpreter which does actions (IO) inside the parse function. But I don't know how to do it. That code show that What I need. Does trick exist that the block function can contain an action (putStr)? import Text.ParserCombinators.Parsec import Data.Map interpret s = runParser mainf () "" s mainf :: GenParser Char () (IO ()) mainf = do rr <- block eof return $ putStrLn rr block :: GenParser Char () String block = do s <- string "HELLO WORLD" ----- putStrLn "There is an action" return s Daneel Yaitskov.