
On Fri, May 24, 2013 at 1:56 PM, Edward A Kmett
This is precisely the situation I am referring to when I mention ad hoc casewise reasoning.
What laws say that 'foldMap point' does anything useful? Given just the type signature what reasoning can you do?
Without knowing the particular instances involved, you get nothing.
With Set you get a glued together Set, but Maybe is going to try to smash together the elements under the Maybe with some extra Semigr^H^H^H^H^H^HMonoid.
Pointed requires ad hoc reasoning for virtually every use case. The only law you can state for it is a free theorem for its type.
It's sort of like a higher-kinded equivalent of Data.Default, with roughly the same semantics. Just think of it as being like QuickCheck's Arbitrary class, except with a single, pre-determined RNG seed. Useful!
On the other hand with classes like Apply or Bind you get access to lots of useful semigroup-like structures you can still reason about in general, not in particular, including things that can't be made Applicative/Monadic. (e.g. IntMap).
One example is that Bind would occasionally be handy for EDSLs that don't permit lifting arbitrary values as a no-op. Incidentally, desugaring do notation does not actually use return at all, if memory serves me... - C.