
Brian Hulley wrote:
Hi - I've got the following function which doesn't compile:
createMonoMultiFont :: (MonadException m, Enum i, Bounded i) => [(i, Font, Colour)] -> m (MonoMultiFont i) createMonoMultiFont elements = liftIO . block $ do mmfRaw <- duma_MonoMultiFont_create (fromEnum (maxBound::i)) mmfPtr <- newForeignPtr duma_MonoMultiFont_Release mmfRaw return $ MonoMultiFont mmfPtr
The problem is that ghc complains that there is no instance for Bounded i even though I've written "Bounded i" in the type declaration for the function.
Here is a gross hack that compiles: createMonoMultiFont elements = liftIO . block $ do let (onei,_,_):_ = (undefined, undefined, undefined) : elements upper :: Bounded a => a -> a upper _ = maxBound last = upper onei mmfRaw <- duma_MonoMultiFont_create (fromEnum last) -- adding of elements to mmfRaw ommitted for clarity mmfPtr <- newForeignPtr duma_MonoMultiFont_Release mmfRaw return $ MonoMultiFont mmfPtr Still, it would be nice to be able to just write (maxBound::i) since the dictionary for i is present in the result. Brian.