
Hello! I have a function, which reads the contents of a file into a string: <function1> readImage :: String -> IO String readImage filename = do fileContent <- readFile filename return fileContent </function1> The result of this function is fed into another function, which converts the string content of the file (it is a PGM image file) into a list of integer values (one integer for each pixel, one-dimensional array): <function2> convertToList fileContent = drop 3 fileContentNumbers where fileContentNoComments = removeComments fileContent fileContentTokens = words fileContentNoComments fileContentNumbers = map read (tail fileContentTokens) fileContentNumArr = listArray (1, length fileContentNumbers) fileContentNumbers </function2> Then, I wanted to verify that this function works properly and wrote a test case, which reads an image and tests whether the resulting list is correct: <test-case> testConvertToList01 = TestCase (assertEqual "" [0, 255, 255, 255, 255, 0, 255, 255, 255, 255, 0, 255, 255, 255, 255, 0] (convertToList (readImage "../data- test/diagonalImage.pgm"))) </test-case> When I load the files (you will find them all in attachment) into GHCi, I get following error <error-message> Couldn't match `String' against `IO String' Expected type: String Inferred type: IO String In the application `readImage "../data-test/diagonalImage.pgm"' In the first argument of `convertToList', namely `(readImage "../data-test/diagonalImage.pgm")' </error-message> I suppose that the error is due to this call in the test case: (convertToList (readImage "../data-test/diagonalImage.pgm")) readImage returns IO String and convertToList accepts String. How can I re-write this test case so that it works? Thanks in advance Dmitri Pissarenko -- Dmitri Pissarenko Software Engineer http://dapissarenko.com
participants (1)
-
Dmitri Pissarenko