[Haskell-cafe] Applicative instances for Monads
wren ng thornton
wren at freegeek.org
Sat Sep 25 19:43:24 EDT 2010
On 9/24/10 10:01 PM, Gregory Crosswhite wrote:
> Hey everyone,
>
> There is something that has been bugging me recently about the
> Applicative class and the Monad class.
>
> Any type constructor F that is a Monad has a natural Applicative instance,
>
> (<$>) :: F (a -> b) -> F a -> F b
> mf <$> ma = do
> f <- mf
> a <- ma
> return (f a)
Er, I'm pretty sure you mean (<*>) not (<$>) :)
> So it seems that defining something to be a Monad should automatically
> make it an instance of Applicative with this definition for (<$>). So
> far so good, but there are times when this implementation is too
> "sequential". The nature of Applicative is that later actions are not
> allowed to depend on earlier actions,
Yes and no. Later actions are not allowed to depend on the resulting
value of earlier actions, but they are most certainly allowed to
'depend' on the side-effects of earlier actions. Otherwise applicative
parser combinators wouldn't make any sense because there's be no way to
sequence their effects of consuming input.
It would be nice to have something like AIO in a standard library though.
--
Live well,
~wren
More information about the Haskell-Cafe
mailing list