[Haskell] Help on Arrows
David Menendez
zednenem at psualum.com
Sat Jan 15 19:03:45 EST 2005
Georg Martius writes:
> Hi folks,
>
> I would like to use Arrows, but I just can't figure out how to
> actually use them. I looked at various documentations including the
> API doc [1], the Wiki [2], [3], and some random pages on the net but
> didn't find a single simple example that tells me how to apply an
> Arrow to a value.
It depends on the type of the arrow. Arrows of type (->) can be applied
directly, because they're just plain functions. Arrows of type 'Kleisli
m' can be applied using a simple 'runKleisli' function.
runKleisli :: Kleisli m a b -> a -> m b
runKleisli (Kleisli f) = f
(I'm not sure why this isn't in Control.Arrow in the first place.)
Using your example arrow, we can use ($) and 'runKleisli' to coerce it
into functions of various types.
myAdd1A :: (Arrow a, Num b) => a b b
myAdd1A = arr (\x -> x + 1)
($) myAdd1A :: Num b => b -> b
runKleisli myAdd1A :: (Monad m, Num b) => b -> m b
More interesting arrows, like the signal processors in Yampa [4], may
not have a meaningful concept of application.
[4] <http://www.haskell.org/yampa/>
--
David Menendez <zednenem at psualum.com> <http://www.eyrie.org/~zednenem/>
More information about the Haskell
mailing list