
Hi Haskell cafe, Is there any standard or guideline for making a "partial" instance of a class, by which I mean implementing some methods of a class, but not all of them? In my concrete case I've got some type X which is almost an Arrow, except that I cannot lift any function a -> b to my type (of course I can for some a and b), so I cannot give a sensible implementation for arr. I can however give sensible implementations for the other methods in the Arrow class, and I'd like to use them (and possibly derived combinators) in other places. I see three possible solutions for this situation, I think I've seen at least the first two being used in well-known packages, but I couldn't find them anymore: 1. Make a class instance, and for the methods you don't implement put an 'error' call 2. Create functions with names from the class and with types specialised to your type, so that you can use it as if the instance was there. I.e. provide a function first :: X a b -> X (a, c) (b, c), which should be imported qualified to avoid name conflicts with the real Arrow class. The drawback of this is of course the conflicting names, but also the fact that derived combinators cannot be used. 3. Create functions with different names, to also avoid name clashes, i.e. firstX :: X a b -> X (a, c) (b, c). My preference would be to pick 1., but it feels quite bad in the same time. Any suggestions? Jeroen