The identity law is optional, in whihc case your 'e' would be a semigroup without a default 'bar'foo f . foo g = foo (f `mappend` g)foo bar = idI think what you're looking for are monoid actions: http://hackage.haskell.org/package/monoid-extras-0.2.2.0/docs/Data-Monoid-Action.htmlAnd the laws the typeclass should satisfy:
On 21 April 2014 11:46, Tobias Brandt <tob.brandt@googlemail.com> wrote:
Your class looks like Unfoldable from Data.Collections. foo is insert and bar is empty. The other three methods can be defined in terms of insert and empty.
On 21 April 2014 07:09, Bardur Arantsson <spam@scientician.net> wrote:
Hi all,
I was wondering if anyone out there knows if this type class has a name?
class Foo a e where
foo :: e -> a -> a
bar :: a
(I also have a fundep a -> e, but that's not essential.)
Essentially the usage is:
You have a sequence of "events" e_i and a starting value
"bar" and can use the "foo" function to apply all events
to that starting value
foo e_n $ foo e_{n-1} $ ... $ foo e_0 $ bar
and thus get the final value of the a induced by the
events e_i.
(I've included the "bar" starting value in the type class, but I suppose
it could be supplied by a Default instance.)
Regards,
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe