[m-rev.] for review: Add maybe.semidet_to_maybe
paul at bone.id.au
Wed Aug 10 16:01:16 AEST 2016
For review by anyone
After adding this function and preparing the commit I found that there are
some similar, but probably different enough predicates and functions in
std_util.m Maybe they should be moved to maybe?
Please also consider the name.
library/maybe.m | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/library/maybe.m b/library/maybe.m
index 81c9c8f..a865e4d 100644
@@ -169,6 +169,13 @@
:- pred maybe_is_yes(maybe(T)::in, T::out) is semidet.
+ % semidet_to_maybe(Pred) = MaybeResult.
+ % Make a maybe value from a semidet predicate.
+:- func semidet_to_maybe(pred(X)) = maybe(X).
+:- mode semidet_to_maybe(pred(out) is semidet) = out is det.
% Return the value from within the maybe or a default value if there is
@@ -210,6 +217,13 @@ map_fold3_maybe(P, yes(T0), yes(T), !A, !B, !C) :-
+semidet_to_maybe(Pred) = Result :-
+ ( if Pred(X) then
+ Result = yes(X)
+ Result = no
maybe_default(_, yes(X)) = X.
maybe_default(D, no) = D.
More information about the reviews