[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