Implementation of transforming FlatCurry expressions by applying deterministically defined expressions transformations as long as possible.
transformExprDet
:: ((Int, [Int]) -> Expr -> Maybe (Expr, String, Int)) -> Int -> Expr -> Expr
Simplifies an expression according to some expression transformation.
Since the expression transformation can be non-deterministically
defined, we pass it as a function which is similarly to passing it
via run-time choice.
The second argument is the maximum number of transformation steps
to be applied. If the number is -1
, then keep going until
no transformation can be applied.
showTransformExprDet
:: ((Int, [Int]) -> Expr -> Maybe (Expr, String, Int)) -> Int -> Expr -> (Expr, String, Int)