
On Tuesday 07 September 2010 05:22:55, David Menendez wrote:
On Mon, Sep 6, 2010 at 10:22 PM, wren ng thornton
wrote: On 9/6/10 1:33 PM, David Menendez wrote:
For that matter, can you even describe what pure is intended to do without reference to<*> or join?
As already stated: fmap f . pure = pure . f
That's pretty general. For lists, the functions having that property include const [], \x -> [x,x], and repeat.
In fact, I think *every* appropriately-typed function satisfies that law. Does anyone know of a counter-example?
class Functor f => Pointed f where point :: a -> f a -- satisfying fmap f . point = point . f notQuitePure :: Pointed f => a -> f a notQuitePure _ = point undefined fmap (const True) . notQuitePure = point . const True But I don't see how to violate that law without introducing undefined on the RHS.