Reputation: 882
I am writing up a piece of code from "Real World Haskell" :
ghc --make ch04/InteractWith.hs
[1 of 1] Compiling Main ( ch04/InteractWith.hs, ch04/InteractWith.o )
ch04/InteractWith.hs:9:5: parse error on input `args'
dan@dbmint ~/testHaskell $ cat ch04/InteractWith.hs
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 "error: exactly two arguments needed"
myFunction = id
Upvotes: 2
Views: 378
Reputation: 54058
The whitespace is off
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 "error: exactly two arguments needed"
myFunction = id
Upvotes: 2
Reputation: 15038
Wrong indentation. The do-block (the args <- getArgs ...
part) is at the same level as the start of the mainWith
definition.
This compiles without errors:
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 "error: exactly two arguments needed"
myFunction = id
Upvotes: 8