sti*_*tes 6 haskell pointfree maybe
我只是在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
Run Code Online (Sandbox Code Playgroud)
是否有一个无点的实现a?我也一直在寻找一个更具体的版本a -> Maybe a,并且觉得某处可能有答案Control.Arrow.但是,由于Maybe是数据类型和if-else语句控制数据流,我不确定是否有一种干净的方法.
阻碍制作该无点的主要原因是if/ then/ else.您可以定义if'组合器,也可以使用我定义和使用的通用版本:
ensure p x = x <$ guard (p x)
Run Code Online (Sandbox Code Playgroud)
标准工具提供连续的无点版本
ensure p = ap (<$) (guard . p)
ensure = ap (<$) . (guard .)
Run Code Online (Sandbox Code Playgroud)
虽然我真的不认为要么比有点版本更好.
您可以导入find从Data.Foldable,然后它是相当简单:
import Data.Foldable(find)
maybeIf cond = find cond . Just
Run Code Online (Sandbox Code Playgroud)
这个函数find并不复杂,所以你可以很容易地自己定义它Maybe,但是它实际上与你自己的实现没那么不同,maybeIf所以你可能不会获得太多,这取决于你想要这样做的原因.