我最近写了一篇文章
do
e <- (Left <$> m) <|> (Right <$> n)
more actions
case e of
Left x -> ...
Right y -> ...
这看起来很别扭。我知道protolude
(和其他一些包)有定义
-- Called eitherP in parser combinator libraries
eitherA :: Alternative f => f a -> f b -> f (Either a b)
但即便如此,这一切仍感觉有点繁琐。我是否还有其他优雅的方法可以让它更加简洁明了?
fx
可以清晰地引用由“更多操作”绑定的变量。 - Daniel Wagnerfx :: TypeOfM -> More -> Types -> m ()
,并且类似地为fy
。然后,最后一行将是e p q
或类似的内容。如果在more actions
中绑定了很多变量,则这会很快变得丑陋,但对于仅有一两个变量的情况,它可能会很好地解决问题。 - DDub