
Lists! The finite kind.
This could mean Seq for instance.
On Nov 30, 2012 9:53 AM, "Brent Yorgey"
On Fri, Nov 30, 2012 at 02:33:54AM +0100, Ben Franksen wrote:
Brent Yorgey wrote:
On Thu, Nov 29, 2012 at 03:52:58AM +0100, Ben Franksen wrote:
Tony Morris wrote:
As a side note, I think a direct superclass of Functor for Monad is not a good idea, just sayin'
class Functor f where fmap :: (a -> b) -> f a -> f b
class Functor f => Apply f where (<*>) :: f (a -> b) -> f a -> f b
class Apply f => Bind f where (=<<) :: (a -> f b) -> f a -> f b
class Apply f => Applicative f where unit :: a -> f a
class (Applicative f, Bind f) => Monad f where
Same goes for Comonad (e.g. [] has (=<<) but not counit) ... and again for Monoid, Category, I could go on...
Hi Tony
even though I dismissed your mentioning this on the Haskell' list, I do have to admit that the proposal has a certain elegance. However, before I buy into this scheme, I'd like to see some striking examples for types with natural (or at least useful) Apply and Bind instances that cannot be made Applicative resp. Monad.
Try writing an Applicative instances for (Data.Map.Map k). It can't be done, but the Apply instance is (I would argue) both natural and useful.
I see. So there is one example. Are there more? I'd like to get a feeling for the abstraction and this is hard if there is only a single example.
Any data type which admits structures of arbitrary but *only finite* size has a natural "zippy" Apply instance but no Applicative (since pure would have to be an infinite structure). The Map instance I mentioned above falls in this category. Though I guess I'm having trouble coming up with other examples, but I'm sure some exist. Maybe Edward knows of other examples.
-Brent
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe