[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