summaryrefslogtreecommitdiff
path: root/dhall/src/expr.rs
diff options
context:
space:
mode:
authorNadrieril2019-04-06 20:32:25 +0200
committerNadrieril2019-04-06 20:32:25 +0200
commit412d0fac51b7b51aabcb049e3d6ba52f3dda1529 (patch)
treef72a1aa14d2bf978a7fb4d00b7b2f8ffedde3e90 /dhall/src/expr.rs
parent396ec334bac1e8d10a2d2b2d683c93e3b2ff4d8d (diff)
Move binary decoding to new API
Diffstat (limited to 'dhall/src/expr.rs')
-rw-r--r--dhall/src/expr.rs22
1 files changed, 14 insertions, 8 deletions
diff --git a/dhall/src/expr.rs b/dhall/src/expr.rs
index 72633ea..ae52e4d 100644
--- a/dhall/src/expr.rs
+++ b/dhall/src/expr.rs
@@ -1,27 +1,33 @@
-use crate::imports::ImportError;
use crate::imports::ImportRoot;
use crate::typecheck::TypeError;
use dhall_core::*;
-#[derive(Debug, Clone)]
+#[derive(Debug, Clone, Eq)]
pub struct Parsed(pub(crate) SubExpr<X, Import>, pub(crate) ImportRoot);
-#[derive(Debug, Clone)]
+
+#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Resolved(pub(crate) SubExpr<X, X>);
+
#[derive(Debug, Clone)]
pub struct Typed(pub(crate) SubExpr<X, X>, Type);
+
#[derive(Debug, Clone)]
pub struct Type(pub(crate) Box<Normalized>);
+
#[derive(Debug, Clone)]
pub struct Normalized(pub(crate) SubExpr<X, X>);
-impl Parsed {
- pub fn resolve(self) -> Result<Resolved, ImportError> {
- crate::imports::resolve_expr(self, true)
+impl PartialEq for Parsed {
+ fn eq(&self, other: &Self) -> bool {
+ self.0 == other.0
}
- pub fn resolve_no_imports(self) -> Result<Resolved, ImportError> {
- crate::imports::resolve_expr(self, false)
+}
+impl std::fmt::Display for Parsed {
+ fn fmt(&self, f: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> {
+ self.0.fmt(f)
}
}
+
impl Resolved {
pub fn typecheck(self) -> Result<Typed, TypeError<X>> {
let typ = Type(Box::new(Normalized(crate::typecheck::type_of(