When I am finally starting to get a handle on Monads I discovered Arrows and I am thrown back into confusion.  At least that is how it feels.  In my exploration of Haskell I have spent a good deal of time trying to completely grasp and understand Monads.  I have read much about it and feel pretty good about my understanding of them now.  I am no expert but I at least am no longer afraid when I see or read about them.

But then I came across Arrows.  Arrows (from what I understand) are a further abstraction on top of Monads which are themselves abstractions.  What does this mean? I don't know.

I encountered arrows when I was looking into using the Haskell XML Toolkit.  I was able to get a sample working (which I am planning to write about soon) using the toolkit and Arrows but it felt like shooting a pistol in the dark. 

When I post the sample I created I will try my best to describe what I understand about it but I feel like this is going to be a slow road before I get a grasp on Arrows.