我正在玩Parsec,我希望将两个解析器合并为一个,结果放在一对,然后将另一个函数提供给解析结果来写这样的东西:
try (pFactor <&> (char '*' *> pTerm) `using` (*))
Run Code Online (Sandbox Code Playgroud)
所以我写了这个:
(<&>) :: (Monad m) => m a -> m b -> m (a, b)
pa <&> pb = do
a <- pa
b <- pb
return (a, b)
Run Code Online (Sandbox Code Playgroud)
和
using :: (Functor f) => f (a, b) -> (a -> b -> c) -> f c
p `using` f = (uncurry f) <$> p
Run Code Online (Sandbox Code Playgroud)
有什么类似的(<&>)已经在某处实现了吗?或者这可以写成免费的吗?我尝试fmap (,)但似乎很难匹配类型.