
On Fri, Jul 13, 2012 at 8:11 AM, Ross Paterson
On Thu, Jul 12, 2012 at 02:47:57PM +0100, Ross Paterson wrote:
Though one possibility that might get us most of the way there would be to refactor the Arrow class as
class PreArrow a where premap :: (b -> b') -> a b' c -> a b c
class (Category a, PreArrow a) => Arrow a where arr :: (b -> c) -> a b c arr f = premap f id
first :: a b c -> a (b,d) (c,d)
I've done this and the associated GHC changes locally; it yields a simple rule for determining which instances are needed, based on the keywords used:
* all commands ("proc" and operator arguments) need PreArrow * "do" needs Arrow * "rec" needs ArrowLoop * "case" or "if" need ArrowChoice
I'm warming to it as a worthwhile generalization (though not exactly what was asked for).
Thank you for the response. This sounds exciting, but sadly, I must admit that it is a little (?) above my head, and I cannot relate this extension to my original question…. Best regards, Tsuyoshi