[Haskell-cafe] Getting an attribute of an object

Dmitri Pissarenko mailing-lists at dapissarenko.com
Thu Feb 10 15:17:17 EST 2005


I have a list of instances of the ClassifiedImage class, which is defined as

data ClassifiedImage = ClassifiedImage {imageFileName :: String, subjectID ::
        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

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

More information about the Haskell-Cafe mailing list