
Hi all. I am writing a Monad intace for my own Writer-like data type "HtmlWriter" (see code below). The main HtmlWriter's difference is in return() function. I'd like it to convert user data (a) to html. But here come troubles. In general, there are two cases: 1) (HTML a) exists 2) (HTML a) doesn't exist So, i need to write different implementations of return() for both cases. Something like this: 1) return a = HtmlWriter (a, toHtml a) 2) return a = HtmlWriter (a, toHtml (show a)) I can't find a way to do it. Is it possible somehow? Please, help. Here is the code: ------------- import Control.Monad import Text.XHtml.Transitional newtype HtmlWriter a = HtmlWriter { runHtmlWriter :: (a, Html) } instance Monad (HtmlWriter) where return a = HtmlWriter (a, toHtml a) -- ??? return a = HtmlWriter (a, toHtml (show a)) m >>= k = HtmlWriter $ let (a, w) = runHtmlWriter m (b, w') = runHtmlWriter (k a) in (b, w `mappend` w') ------- Thanks, Sergey.