Hello!
Sorry that I bother you again with my problem.
> It may be you'd profit from reading some of the Monad tutorials out there.
I followed your advice and read the "All about monads" tutorial. After I've
done
that I could fix one problem.
But now there is another one.
In the main program, there is following piece of code
<code-snippet>
let classifiedImagesWithData = ((return trainingSet) >>= readClassifiedImages)
let allImages = (getImages classifiedImagesWithData)
</code-snippet>
Signatures of readClassifiedImages and getImages are
readClassifiedImages :: [ClassifiedImage] -> [IO (ClassifiedImage, Image)]
getImages :: [(ClassifiedImage, Image)] -> [Image]
readClassifiedImages does some file I/O, so it is OK when its result is in the
IO monad.
getImages does not do any IO related stuff, so I declared it without the IO
monad.
The line
let allImages = (getImages classifiedImagesWithData)
of the above code snippet leads to following error:
<error>
ExperimentalYaleFaceDb.hs:43:
Couldn't match
`(ClassifiedImage, Image)' against `IO (ClassifiedImage, Image)'
Expected type: [(ClassifiedImage, Image)]
Inferred type: [IO (ClassifiedImage, Image)]
In the first argument of `getImages', namely
`classifiedImagesWithData'
In the definition of `allImages':
allImages = (getImages classifiedImagesWithData)
Failed, modules loaded: TestLik, Lik, HUnit, HUnitText, HUnitBase, HUnitLang.
</error>
Is there a way to fix this problem apart from changing signature of getImage?
Thanks in advance
Dmitri Pissarenko
--
Dmitri Pissarenko
Software Engineer
http://dapissarenko.com