[Haskell-beginners] function to read file and return list of contents not compiling
Sumit Sahrawat, Maths & Computing, IIT (BHU)
sumit.sahrawat.apm13 at iitbhu.ac.in
Thu Feb 19 17:25:39 UTC 2015
The type should be IO [String]. You do IO, and it results in a list of
Strings.
Also, take a look at the following types:
contents :: String
lines :: String -> [String]
Which means that,
lines contents :: [String]
But because you're dealing with a monad (IO in this case), this will not
typecheck. You can convert a pure value to a monadic value using the return
function:
return :: Monad m => a -> m a
Not specific to IO, but all monads.
Hope this helps.
On 19 February 2015 at 22:47, Geoffrey Bays <charioteer7 at gmail.com> wrote:
> Haskellers:
>
> I want to write a function that takes a class name and reads from a file
> and then returns the
> list of String of the file lines. I have experimented with various return
> types, but GHC does not like any of them. Here is my function:
>
> readData :: String -> IO String -- what type here??
> readData classNameP = do
> let fileName = classNameP ++ ".txt"
> contents <- readFile fileName
> lines contents
>
> Not to complain, but this would not be difficult in any other language I
> have tried, so I could use
> some explanation. I suspect it has to do with understanding the IO Monad.
>
> Many Thanks
>
> Geoffrey
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
>
--
Regards
Sumit Sahrawat
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20150219/26657dd8/attachment-0001.html>
More information about the Beginners
mailing list