【发布时间】:2014-02-04 08:50:36
【问题描述】:
我想轻松地从“失败”数据类型中取出一个值,或者在失败的情况下使用默认值。
这是我对Maybe 的实现:
infixr 1 <||>
(<||>) :: Maybe a -> a -> a
(<||>) = flip fromMaybe
pred :: String -> String -> Bool
pred x name = (x ==) <$> name `lookup` myMap <||> False
如果name 在myMap 中映射到x,则pred 返回True。
但正如在 Haskell 中通常的情况一样,我不知道有一种更抽象的方式来执行此操作。有人吗?
【问题讨论】:
-
maybe False (x ==) $ lookup name myMap -
是的,我也想过这个,但我正在寻找更多的抽象。
-
问题在于实际上没有办法抽象出
fromMaybe,因为在一般情况下,函子不允许您提取已包装的值。你总是需要一个Maybe特定的函数,它可能是fromMaybe、fromJust或maybe,具体取决于你的编写方式。 -
Functor 本身无法提供这一点是有道理的,但我会想象另一个类型类可以为 Maybe、Either 等提供它。它可以为 functor 的子集实现。跨度>
-
我想没有足够的用例让人们想要通用地这样做。一个特定的函子总是需要它,例如
Maybe。
标签: haskell default default-value maybe