Hi, while learning about all the type classes and their relationships I came across something I found weird. If I understand it correctly, banana brackets where originally developed for Applicatives. The intent was to enable us to write something like (| (\a b c -> a + b + c), [3], [1,2], [5,0,7] |) and have it translated to liftA3 (\a b c -> a + b + c) [3] [1,2] [5,0,7] or alternatively, to allow us to write something like (| (pure $ \a b c -> a + b + c), [3], [1,2], [5,0,7] |) and have it translated directly to pure (\a b c -> a + b + c) <*> [3] <*> [1,2] <*> [5,0,7] A variant of banana brackets is implemented in ghc, but only for Arrows as part of -XArrowSyntax. Arrows are just the intersection of Applicative and Category, so this implementation seems to be a specialization. What's worse, I don't think -XRebindableSyntax extends to banana brackets. But why? Is it hard to have the notation work with both? (After all, the relationship between Arrows and Applicatives is not easily expressed in Haskell.) Was the demand for (Applicative) bananas not big enough? Is it just a relic? And more to the point: I have not looked at the ghc code base at all yet, but it's on my bucket list to hack on it one day. Right now, a generalization of banana brackets seems like a simple enough low pressure first project, but I fear that it might break code or that there is some pitfall I'm not seeing. Can anybody shed a bit of light on this? Thanks and cheers, Martin L. P.S.: If the list receives this mail several times, I apologize. The list management tool seems to be confused by gmail vs. googlemail. That's what you get for using non-Haskell software. ;)