Success and failure in Stratego allows one to avoid computing with Boolean values all the time. However, sometimes it is necessary to capture the failure (or success) of a strategy and translate it into a term. For example, when performing [[constant folding]] of relational expressions one would like to write
ConstFold :
|[ i < j ]| -> (i, j)
However, when the =lt= fails, the rule fails. What is needed is a little wrapper strategy that turns failure
and success into an appropriate term.
ConstFold :
|[ i < j ]| -> (i,j))>
where =to-bool= could be defined as
to-bool(s) =
if s then
!|[ true ]|
else
!|[ false ]|
end
that is, when =s= succeeds return =true=, otherwise return =false=.
(Note that these examples use [[concrete syntax]].)
-- Main.EelcoVisser - 17 Jun 2002