Я играю с Parsec и хочу объединить два парсера в один с результатом, помещенным в пару, а затем передать ему другую функцию для обработки результата разбора, чтобы написать что-то вроде этого:
try (pFactor <&> (char '*' *> pTerm) `using` (*))
Итак, я написал это:
(<&>) :: (Monad m) => m a -> m b -> m (a, b)
pa <&> pb = do
a <- pa
b <- pb
return (a, b)
И
using :: (Functor f) => f (a, b) -> (a -> b -> c) -> f c
p `using` f = (uncurry f) <$> p
Есть ли что-нибудь подобное (<&>), которое где-то было реализовано? Или это может быть написано бессмысленно? Я попытался fmap (,)
, но, кажется, трудно подобрать тип.