当前位置:  开发笔记 > 编程语言 > 正文

是否有一种无条件的方法将条件检查转换为输入的Maybe类型?

如何解决《是否有一种无条件的方法将条件检查转换为输入的Maybe类型?》经验,为你挑选了2个好方法。

我只是在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语句控制数据流,我不确定是否有一种干净的方法.



1> Daniel Wagne..:

阻碍制作该无点的主要原因是if/ then/ else.您可以定义if'组合器,也可以使用我定义和使用的通用版本:

ensure p x = x <$ guard (p x)

标准工具提供连续的无点版本

ensure p = ap (<$) (guard . p)
ensure = ap (<$) . (guard .)

虽然我真的不认为要么比有点版本更好.


`Data.Bool`有`bool`.

2> Peter Hall..:

您可以导入findData.Foldable,然后它是相当简单:

import Data.Foldable(find)

maybeIf cond = find cond . Just

这个函数find并不复杂,所以你可以很容易地自己定义它Maybe,但是它实际上与你自己的实现没那么不同,maybeIf所以你可能不会获得太多,这取决于你想要这样做的原因.

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有