On Feb 20, 2010, at 10:25 AM, Heinrich Apfelmus wrote:

But isn't the line

   renderXHtml (ConcatView l r) = fold $ renderXHtml (ConcatViews l r)

a type error? I'm assuming

   Data.Foldable.fold :: (Foldable m, Monoid t) => m t -> t

being applied to the result type of  renderXHtml  which is  Html  and
not of the form  m t .

Yup, that's a type error. I mean to fold the View (in this case a ConcatView) into a monoid. I think I meant

> foldMap renderXHtml (ConcatViews l r)

Your intention reminds me of the use of type variables to get
functor-like behavior for free, like in

   data RGB' a = RGB a a a   -- auxiliary type constructor
   type RGB = RGB' Int       -- what we're interested in

but I don't quite see what you're doing with the free monad here, Alexander?

As you noticed, I am seeking that functorial behavior in order to gain some genericity. bind and return do encode some logic about the nature of monadic adjunction, which I am relying on theoretically. I could have used a Functor instance just as easily, but I would have lost my "intention" of defining co-equalizers implicitly. (http://en.wikipedia.org/wiki/Beck%27s_monadicity_theorem )

Also, it was easier to write a monad instance than an Applicative instance, at least on my first try. ;-)
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to