ram*_*ion 8 syntax haskell pattern-matching
假设我有一个像以下一样的haskell表达式:
foo (Nothing, Just a) = bar a
foo (Just a, Nothing) = bar a
Run Code Online (Sandbox Code Playgroud)
是否有任何haskell语法来折叠这些情况,所以我可以匹配任一模式并指定bar a为两者的响应?或者那就像我能得到的一样简洁?
如果您的代码比您的示例更复杂,您可能希望使用Alternative实例for Maybe和PatternGuards扩展(Haskell2010的一部分)执行类似的操作.
{-# LANGUAGE PatternGuards #-}
import Control.Applicative
foo (x, y) | Just a <- y <|> x = bar a
Run Code Online (Sandbox Code Playgroud)
如果你不熟悉它,如果有的话,<|>选择最左边的Just,Nothing否则返回,导致模式防护失败.