A Brutal Introduction to (Haskell) Arrows
blog.downstairspeople.org
blog.downstairspeople.org
Designing one and implementing for your own purposes - now that's a bit more tricky. But then, we're often consumers much more than producers. Even when programming you're a consumer as far as screen, cpu, memory, compiler, etc. etc. production is concerned. You know this stuff well enough to use it day to day, but if someone told you to explain the cpu in depth, most likely you'd have problems with it.
If you do Haskell all the time, it's not that hard actually. But then again - not many people write serious Haskell stuff as their day job.
I think an article along the lines of, "100 incredibly boring Monads and 5 clever ones", could really help with understanding.