http://thesz.livejournal.com/ ([identity profile] thesz.livejournal.com) wrote in [personal profile] lomeo 2007-12-06 01:50 pm (UTC)

Я посмотрел сюда: http://www.soi.city.ac.uk/~ross/papers/Applicative.pdf

По этому тексту получается вот, что:
...
\a b -> (flip ($)) <$> a <*> b -- definition of liftA2
\a b -> (pure (flip ($)) <*> a) <*> b -- definition of l<$>
Скобки можно переставлять и раскрывать? По статье - можно.

\a b -> pure (flip ($)) <*> a <*> b

Тут дальше лог с выводом типов, не то, чтобы это было доказательством, но, может, на что натолкнет:
*Main Control.Applicative> :t \ a b -> pure (flip ($)) <*> a <*> b
\ a b -> pure (flip ($)) <*> a <*> b :: (Applicative f) =>
                                        f a -> f (a -> b) -> f b
*Main Control.Applicative> :t \ a b -> pure (($)) <*> a <*> b
\ a b -> pure (($)) <*> a <*> b :: (Applicative f) => f (a -> b) -> f a -> f b
*Main Control.Applicative> :t pure (flip ($))
pure (flip ($)) :: (Applicative f) => f (a -> (a -> b) -> b)
*Main Control.Applicative> :t (<*>)
(<*>) :: (Applicative f) => f (a -> b) -> f a -> f b
*Main Control.Applicative> :t (pure (flip ($) <*>)
:1:20: parse error (possibly incorrect indentation)
*Main Control.Applicative> :t (pure (flip ($)) <*>)
(pure (flip ($)) <*>) :: (Applicative f) => f a -> f ((a -> b) -> b)
*Main Control.Applicative>
Первым параметром мы можем подставить f a, получим Applicative f => f ((a->b)->b). Если обединить (pure (flip ($)) <*> a) с (b :: f (a->b)) путем применения <*>, то и получим f b.

Как-то так.

Порядок применения эффектов в Applicative f сохраняется.

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting