Если ваш код более сложный, чем ваш пример, вы можете сделать что-то подобное, используя экземпляр Alternative
для Maybe
и расширение PatternGuards
(часть Haskell2010).
{-# LANGUAGE PatternGuards #-}
import Control.Applicative
foo (x, y) | Just a <- y <|> x = bar a
В случае, если вы не знакомы с ним, <|>
выбирает крайний левый Just
, если он есть, и возвращает Nothing
в противном случае, вызывая сбой охраны шаблона.