Send Beginners mailing list submissions to beginners@haskell.org To subscribe or unsubscribe via the World Wide Web, visit http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners or, via email, send a message with subject or body 'help' to beginners-requ...@haskell.org
You can reach the person managing the list at beginners-ow...@haskell.org When replying, please edit your Subject line so it is more specific than "Re: Contents of Beginners digest..." Today's Topics: 1. Re: IO String and String using readFile (Ian Denhardt) 2. Re: Fwd: IO String and String using readFile (Ian Denhardt) ---------------------------------------------------------------------- Message: 1 Date: Tue, 26 Mar 2019 23:57:13 -0400 From: Ian Denhardt <i...@zenhack.net> To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell <beginners@haskell.org> Subject: Re: [Haskell-beginners] IO String and String using readFile Message-ID: <155365903334.2487.7573599623212981998@localhost.localdomain> Content-Type: text/plain; charset="utf-8" Sounds like you want concatMap: https://hackage.haskell.org/package/base-4.12.0.0/docs/Prelude.html#v:concatMap Quoting Yugesh Kothari (2019-03-26 23:48:35) > I see. anyway, my use case is something like this- > I have two functions > fromFile :: [String] -> [Int] > func :: String -> [Int] > I want to use the "words contents" output and pass each element in it > to func and send back [Int] from "fromFile" function (where I > originally read the file.) > Could you suggest a better way to do this? > Quoting� Ian Denhardt > On Wed, 27 Mar, 2019, 9:13 AM Ian Denhardt, <[1]i...@zenhack.net> wrote: > > It would help to see the complete source file, but I'll hazard a > guess > you're doing something like: > main = do > � � contents <- readFile "file.txt" > � � words contents > At the GHCi prompt, each line can be any expression, and GHCi will > evaluate it and then display it. The two lines in your session > aren't > really related. > In contrast, the do block in the source file expects the expression > at > the end to be an IO action. > What do you want your program to do when you get to "words > contents"? > display it? (If you want to display it, pass it to `print`). > Quoting Yugesh Kothari (2019-03-26 23:35:14) > >� � Hi,� > >� � I am trying to read data from a file. > >� � When I do- > >� � ghci> contents <- readFile "file.txt" > >� � ghci> words contents > >� � Then everything works. > >� � The same thing when done in a .hs file gives an IO String vs > [String] > >� � error. > >� � Why is that so? > > Verweise > > 1. mailto:i...@zenhack.net ------------------------------ Message: 2 Date: Wed, 27 Mar 2019 00:02:49 -0400 From: Ian Denhardt <i...@zenhack.net> To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell <beginners@haskell.org> Subject: Re: [Haskell-beginners] Fwd: IO String and String using readFile Message-ID: <155365936937.2487.14589775321104928555@localhost.localdomain> Content-Type: text/plain; charset="utf-8" Ah, in that case you'll need the type to be String -> IO [Int] In Haskell, functions *only* do computation -- no side effects, like reading a file. So a String -> [Int] can't do what you want. We have a separate type, IO, for doing things that affect the outside world. For example: ghci> :type readFile readFile :: FilePath -> IO String Also, just a style tip: there's a type alias for String defined called FilePath, which would make the type signature more clear in this case. Quoting Yugesh Kothari (2019-03-26 23:54:40) > Extremely sorry, > The definition of fromFile is String -> [Int] where input parameter is > the name of the file. > ---------- Forwarded message --------- > From: Yugesh Kothari <[1]kothariyug...@gmail.com> > Date: Wed, 27 Mar, 2019, 9:18 AM > Subject: Re: [Haskell-beginners] IO String and String using readFile > To: > Cc: <[2]beginners@haskell.org> > I see. anyway, my use case is something like this- > I have two functions > fromFile :: [String] -> [Int] > func :: String -> [Int] > I want to use the "words contents" output and pass each element in it > to func and send back [Int] from "fromFile" function (where I > originally read the file.) > Could you suggest a better way to do this? > Quoting� Ian Denhardt > On Wed, 27 Mar, 2019, 9:13 AM Ian Denhardt, <[3]i...@zenhack.net> wrote: > > It would help to see the complete source file, but I'll hazard a > guess > you're doing something like: > main = do > � � contents <- readFile "file.txt" > � � words contents > At the GHCi prompt, each line can be any expression, and GHCi will > evaluate it and then display it. The two lines in your session > aren't > really related. > In contrast, the do block in the source file expects the expression > at > the end to be an IO action. > What do you want your program to do when you get to "words > contents"? > display it? (If you want to display it, pass it to `print`). > Quoting Yugesh Kothari (2019-03-26 23:35:14) > >� � Hi,� > >� � I am trying to read data from a file. > >� � When I do- > >� � ghci> contents <- readFile "file.txt" > >� � ghci> words contents > >� � Then everything works. > >� � The same thing when done in a .hs file gives an IO String vs > [String] > >� � error. > >� � Why is that so? > > Verweise > > 1. mailto:kothariyug...@gmail.com > 2. mailto:beginners@haskell.org > 3. mailto:i...@zenhack.net ------------------------------ Subject: Digest Footer _______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners ------------------------------ End of Beginners Digest, Vol 129, Issue 9 *****************************************