diff options
author | Nadrieril | 2019-08-07 21:18:11 +0200 |
---|---|---|
committer | Nadrieril | 2019-08-07 21:18:11 +0200 |
commit | 51c4f79fe092191d670ffa2f9098693079dbc1be (patch) | |
tree | 694f9e26b062388a88143d326bf8a05781b36316 /dhall/src/phase/normalize.rs | |
parent | d248762095908246951b6aa6c211587c6e333c0e (diff) |
Add truncated Natural subtraction
Diffstat (limited to 'dhall/src/phase/normalize.rs')
-rw-r--r-- | dhall/src/phase/normalize.rs | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/dhall/src/phase/normalize.rs b/dhall/src/phase/normalize.rs index 3e45240..395cf28 100644 --- a/dhall/src/phase/normalize.rs +++ b/dhall/src/phase/normalize.rs @@ -47,6 +47,16 @@ pub fn apply_builtin(b: Builtin, args: Vec<Thunk>) -> Value { )), _ => Err(()), }, + (NaturalSubtract, [a, b, r..]) => { + match (&*a.as_value(), &*b.as_value()) { + (NaturalLit(a), NaturalLit(b)) => { + Ok((r, NaturalLit(if b > a { b - a } else { 0 }))) + } + (NaturalLit(0), b) => Ok((r, b.clone())), + (_, NaturalLit(0)) => Ok((r, NaturalLit(0))), + _ => Err(()), + } + } (IntegerShow, [n, r..]) => match &*n.as_value() { IntegerLit(n) => { let s = if *n < 0 { |