diff options
| m--------- | dhall-lang | 0 | ||||
| -rw-r--r-- | dhall/src/semantics/phase/normalize.rs | 11 | ||||
| -rw-r--r-- | dhall/src/semantics/phase/typecheck.rs | 3 | ||||
| -rw-r--r-- | dhall/src/syntax/ast/expr.rs | 2 | ||||
| -rw-r--r-- | dhall/src/syntax/text/parser.rs | 2 | ||||
| -rw-r--r-- | dhall/src/syntax/text/printer.rs | 2 |
6 files changed, 20 insertions, 0 deletions
diff --git a/dhall-lang b/dhall-lang -Subproject 89bbf42f9fd3e9e09f0a15aac9a23d309e50b15 +Subproject ee120309828f8a18b3267d192e3030add2a718e diff --git a/dhall/src/semantics/phase/normalize.rs b/dhall/src/semantics/phase/normalize.rs index 6258ae8..5a0f566 100644 --- a/dhall/src/semantics/phase/normalize.rs +++ b/dhall/src/semantics/phase/normalize.rs @@ -1,4 +1,5 @@ use std::collections::HashMap; +use std::convert::TryInto; use crate::semantics::core::value::Value; use crate::semantics::core::value::ValueKind; @@ -141,6 +142,16 @@ pub(crate) fn apply_builtin( } _ => Ret::DoneAsIs, }, + (IntegerNegate, [n]) => match &*n.as_whnf() { + IntegerLit(n) => Ret::ValueKind(IntegerLit(-n)), + _ => Ret::DoneAsIs, + }, + (IntegerClamp, [n]) => match &*n.as_whnf() { + IntegerLit(n) => { + Ret::ValueKind(NaturalLit((*n).try_into().unwrap_or(0))) + } + _ => Ret::DoneAsIs, + }, (DoubleShow, [n]) => { match &*n.as_whnf() { DoubleLit(n) => Ret::ValueKind(TextLit(vec