
Hi Robert,
The contents of the do block must be indented at-least as much as
mainWith on the previous line.
For instance:
import System.Environment (getArgs)
interactWith function inputFile outputFile = do
....input <- readFile inputFile
....writeFile outputFile (function input)
main = mainWith myFunction
....where mainWith function = do
....................args <- getArgs
....................case args of
..............................[input, output] -> interactWith function
input output
.............................._ -> putStrLn "Usage: Interact inputFile
outputFile"
....................myFunction = id
The haskell wikibook has some more detailed information of
http://en.wikibooks.org/wiki/Haskell/Indentation
Regards,
--Steven
2008/11/23 Robert Kosara
I'm having some trouble getting the InteractWith example from Real World Haskell's Chapter 4 to compile. When I use spaces (like below), it says "Interact.hs:10:30: Empty 'do' construct." When I use tabs (4 spaces per tab), I get "Interact.hs:16:13: parse error on input `='." In either case, I don't see the problem. Any help would be greatly appreciated. I'm also confused about the formatting of the example in the book (page 72). The last line ("myFunction = id") seems to be indented between the where and the next line, why is that? Is that simply a layout problem? To me, it seems it should be on the same level as the where. Below is my program: -- Interact.hs, simple filter in Haskell import System.Environment (getArgs) interactWith function inputFile outputFile = do input <- readFile inputFile writeFile outputFile (function input) main = mainWith myFunction where mainWith function = do args <- getArgs case args of [input, output] -> interactWith function input output _ -> putStrLn "Usage: Interact inputFile outputFile" myFunction = id
Regards, Robert
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners