As a learning strategy, I tried to modify Prelude interact function.
test.hs contents
interact' :: (String -> String) -> IO ()
interact' f = do
path <- getContents
s <- readFile path
putStr (f s)
main :: IO ()
main = interact' id
test.txt contents
Hello World
Calling echo "test.txt" | runhaskell test.hs doesn't display Hello World. Am I overlooking something ?
CodePudding user response:
echo "test.txt" produces the string test.txt\n, and you don't have a file called test.txt\n, just one called test.txt. Either use getLine instead of getContents in Haskell to not get the newline, or printf instead of echo in the shell to not emit the newline in the first place.
