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 :: Stringlines :: 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 aNot specific to IO, but all monads.Hope this helps.On 19 February 2015 at 22:47, Geoffrey Bays <charioteer7@gmail.com> wrote:_______________________________________________GeoffreyMany Thankssome explanation. I suspect it has to do with understanding the IO Monad.Not to complain, but this would not be difficult in any other language I have tried, so I could uselist 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:Haskellers:I want to write a function that takes a class name and reads from a file and then returns the
readData :: String -> IO String -- what type here??
readData classNameP = do
let fileName = classNameP ++ ".txt"
contents <- readFile fileName
lines contents
Beginners mailing list
Beginners@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
--RegardsSumit Sahrawat
_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners