
Hello! I have a list of instances of the ClassifiedImage class, which is defined as follows. data ClassifiedImage = ClassifiedImage {imageFileName :: String, subjectID :: String} deriving Show Attribute imageFileName contains a file name of a certain image. I want to "transform" the list [ClassifiedImage] into a list [(ClassifiedImage, Image)], where Image is content of the file with name imageFileName. That is, I want to have a routine, which iterates through the list of ClassifiedImages, reads each file (with filename contained in the attribute ClassifiedImage.imageFileName) and stores its content in a variable. I have already a function, which reads the content of a file. My idea is to use map for this task: readClassifiedImages :: [ClassifiedImage] -> [(ClassifiedImage, Image)] readClassifiedImages classifiedImages = do return map readerFunc classifiedImages readerFunc denotes some function, which takes the attribute imageFileName of a ClassifiedImage instance. I suppose that this readerFunc looks like shown below. readerFunc :: ClassifiedImage -> (ClassifiedImage, Image) readerFunc classifiedImage = (classifiedImage, fileContent) where fileName = classifiedImageFileName classifiedImage fileContent = readImage fileName classifiedImageFileName :: ClassifiedImage -> String In order for this function to work, I need to define classifiedImageFileName, which "returns" the imageFileName attribute of an instance of ClassifiedImage class. How can I define this function? Can I use map for readImage function, which is in the IO domain? If not, what tutorial can help me? Thanks in advance Dmitri Pissarenko -- Dmitri Pissarenko Software Engineer http://dapissarenko.com