Arrows are generalisations of Monads, which raise function composition into the type system using type-level functions. They're absolutely not examinable.
Amazingly, this is valid Haskell.
type T a b = a -> b
f = (\x -> show x) :: T Int String -- this is a value -- not a function -- which represents the transformation of an Integer to a STring.
f 3 -- "3"
Notice that the type of f is a single value, with no currying, even though f does perform computation:
-- f :: T Int String
I don't understand Arrows, but I'm sure this is the beginning of them. Try it in ghci.