
Excellent! Thanks, Alejandro!
On Fri, Jul 21, 2017 at 12:52 AM, Alejandro Serrano Mena
The problem is that in the "where" clause the only things which are in scope are (roughly) the arguments of the function. In particular, neither "root" nor "inputFile" nor "input" nor "pairs". The solution is to add an extra argument:
main' = do ... mapM_ (f root) pairs where f root (name, content) = writeFile (root ++ name) content
2017-07-21 9:28 GMT+02:00 Jeffrey Brown
: The following compiles and runs perfectly:
main = do (inputFile:_) <- getArgs input <- readFile inputFile let pairs = pairFilesToContents $ readSmsnLines input mapM_ f pairs where f :: (FilePath, String) -> IO () f (name, content) = writeFile name content
But the following triggers the error "Not in scope: ‘root’".
main' = do (root : inputFile :_) <- getArgs input <- readFile inputFile let pairs = pairFilesToContents $ readSmsnLines input mapM_ f pairs where f :: (FilePath, String) -> IO () f (name, content) = writeFile (root+name) content
-- Jeff Brown | Jeffrey Benjamin Brown Website https://msu.edu/~brown202/ | Facebook https://www.facebook.com/mejeff.younotjeff | LinkedIn https://www.linkedin.com/in/jeffreybenjaminbrown(spammy, so I often miss messages here) | Github https://github.com/jeffreybenjaminbrown
_______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.
-- Jeff Brown | Jeffrey Benjamin Brown Website https://msu.edu/~brown202/ | Facebook https://www.facebook.com/mejeff.younotjeff | LinkedIn https://www.linkedin.com/in/jeffreybenjaminbrown(spammy, so I often miss messages here) | Github https://github.com/jeffreybenjaminbrown