summaryrefslogtreecommitdiff
path: root/dhall/src/expr.rs
diff options
context:
space:
mode:
authorNadrieril2019-04-06 20:04:04 +0200
committerNadrieril2019-04-06 20:13:22 +0200
commit396ec334bac1e8d10a2d2b2d683c93e3b2ff4d8d (patch)
tree53503ab8fa9fa90cfc440ff06f4942bc74ade27f /dhall/src/expr.rs
parent366bc783e62682c9597e8caba1dac56638d34fa9 (diff)
Massage import loading into new API
Closes #9
Diffstat (limited to 'dhall/src/expr.rs')
-rw-r--r--dhall/src/expr.rs30
1 files changed, 20 insertions, 10 deletions
diff --git a/dhall/src/expr.rs b/dhall/src/expr.rs
index 0d093cb..72633ea 100644
--- a/dhall/src/expr.rs
+++ b/dhall/src/expr.rs
@@ -1,17 +1,27 @@
+use crate::imports::ImportError;
+use crate::imports::ImportRoot;
use crate::typecheck::TypeError;
use dhall_core::*;
-pub struct Parsed(SubExpr<X, Import>);
-pub struct Resolved(SubExpr<X, X>);
-pub struct Typed(SubExpr<X, X>, Type);
-pub struct Type(Box<Normalized>);
-pub struct Normalized(SubExpr<X, X>);
+#[derive(Debug, Clone)]
+pub struct Parsed(pub(crate) SubExpr<X, Import>, pub(crate) ImportRoot);
+#[derive(Debug, Clone)]
+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> {
-// Ok(Resolved(crate::imports::resolve(self.0)?))
-// }
-// }
+impl Parsed {
+ pub fn resolve(self) -> Result<Resolved, ImportError> {
+ crate::imports::resolve_expr(self, true)
+ }
+ pub fn resolve_no_imports(self) -> Result<Resolved, ImportError> {
+ crate::imports::resolve_expr(self, false)
+ }
+}
impl Resolved {
pub fn typecheck(self) -> Result<Typed, TypeError<X>> {
let typ = Type(Box::new(Normalized(crate::typecheck::type_of(