[Haskell-cafe] How is this variable not in scope?
Adam Bergmark
adam at bergmark.nl
Fri Jul 21 15:09:10 UTC 2017
Another solution is to define `f` below `root` within the do block:
```
main' = do
(root : inputFile :_) <- getArgs
input <- readFile inputFile
let pairs = pairFilesToContents $ readSmsnLines input
let f :: (FilePath, String) -> IO ()
f (name, content) = writeFile (root+name) content
mapM_ f pairs
```
On Fri, 21 Jul 2017 at 10:07 Jeffrey Brown <jeffbrown.the at gmail.com> wrote:
> Excellent! Thanks, Alejandro!
>
> On Fri, Jul 21, 2017 at 12:52 AM, Alejandro Serrano Mena <
> trupill at gmail.com> wrote:
>
>> 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 <jeffbrown.the at gmail.com>:
>>
>>> 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>
>
> _______________________________________________
> 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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20170721/d774ee21/attachment.html>
More information about the Haskell-Cafe
mailing list