有没有办法将部分模式匹配 Package 成Maybe?
我想写一些类似这样的代码:
fromMaybe defaultValue $ do
[a, b] <- mkList :: [Int]
[x] <- mkList' a b :: [Int]
return $ x
其中,如果mkList
的计算结果为长度/= 2的列表,或者mkList' a b
的计算结果为长度/= 1的列表,则此表达式的值为defaultValue
。否则,表达式的计算结果为mkList' a b
返回的唯一元素。
我认为Maybe
单子可以很好地实现这一点,但是如何将失败的模式匹配转换为Nothing
,并将成功的匹配转换为Just
呢?
在 haskell 有可能做到这一点吗?
1条答案
按热度按时间m4pnthwp1#
你的代码几乎可以正常工作,你只需要添加一些
pure
并改变类型:您甚至不需要那些
:: Maybe [Int]
注解。在GHCi中,您可以看到它具有预期的行为: