小编Lin*_*hin的帖子

将两个monadic值放入一对并返回它

我正在玩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 (,)但似乎很难匹配类型.

monads haskell parsec pointfree applicative

4
推荐指数
3
解决办法
332
查看次数

标签 统计

applicative ×1

haskell ×1

monads ×1

parsec ×1

pointfree ×1