Hi,

I think this is my first post to this list although I've been reading it for a long time. So, please, be patient with me and my post.

On 03/16/2010 02:29 PM, Louis Wasserman wrote:
    * We offer Functor, Foldable, and Traversable instances that do not
      respect key ordering.  All are linear time, but Functor and
      Traversable in particular assume the function is monotonic.  The
      Foldable instance is a good way to access the elements of the
      priority queue in an unordered fashion.  (We also export
      mapMonotonic and traverseMonotonic, and encourage the use of those
      functions instead of the Functor or Traversable instances.)

So, it is possible to break the invariants of your priority queue by using fmap with a non-monotonic function, right? I see that it might be usefull to have such instances, sometimes.

As it is not possible to hide instances, once they are definded, I'd propose to not offer those instances by default. Instead you could provide implementations of all the instance functions necessary to define this instances yourself. Or one could have a newtype wrapper around the priority queue for which instances of Function, Foldable, and Traversable are defined. This would allow to "activate" the nice instances on demand but to stay safe by default.

Best regards,
Jean-Marie
_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to