Ross Paterson wrote: > No. Choose an arbitrary element shape :: f () and define > point x = fmap (const x) shape
Interesting. Is the arbitrariness of the shape some sort of evidence that Pointed is not really a very useful class in its own right? Certainly, the shape does matter if you plan to progress to non-trivial Applicative or Monad instances. For example, the non-determinism monad requires shape = [()], while the ZipList applicative functor requires shape = repeat (). Eugene Kirpichov wrote: > 'An arbitrary element' means 'undefined will suffice' > point x = fmap (const x) undefined Well, that would rather limit the possible Applicative instances. :-) (Consider the Applicative law: fmap g x = pure g <*> x) Brent Yorgey wrote: > Prelude> fmap (const 1) [()] > [1] > Prelude> fmap (const 1) undefined > *** Exception: Prelude.undefined True, but as far as I can tell, that doesn't violate any laws of the Pointed class. To put it crudely, if [] is as good as [()], then how is undefined any worse? _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
