我只是在haskell中进行一些简单的练习,并且想知道是否有一种将if-then-else语句转换为Maybe
类型的无点方法:Nothing
如果条件为false则返回,Just
如果条件为true则返回.
总之,给定一些:
maybeIf :: (a -> Bool) -> a -> Maybe a maybeIf cond a = if cond a then Just a else Nothing
是否有一个无点的实现a
?我也一直在寻找一个更具体的版本a -> Maybe a
,并且觉得某处可能有答案Control.Arrow
.但是,由于Maybe
是数据类型和if-else语句控制数据流,我不确定是否有一种干净的方法.
阻碍制作该无点的主要原因是if
/ then
/ else
.您可以定义if'
组合器,也可以使用我定义和使用的通用版本:
ensure p x = x <$ guard (p x)
标准工具提供连续的无点版本
ensure p = ap (<$) (guard . p) ensure = ap (<$) . (guard .)
虽然我真的不认为要么比有点版本更好.
您可以导入find
从Data.Foldable
,然后它是相当简单:
import Data.Foldable(find) maybeIf cond = find cond . Just
这个函数find
并不复杂,所以你可以很容易地自己定义它Maybe
,但是它实际上与你自己的实现没那么不同,maybeIf
所以你可能不会获得太多,这取决于你想要这样做的原因.