summaryrefslogtreecommitdiff
path: root/dhall/src/expr.rs
diff options
context:
space:
mode:
Diffstat (limited to 'dhall/src/expr.rs')
-rw-r--r--dhall/src/expr.rs20
1 files changed, 14 insertions, 6 deletions
diff --git a/dhall/src/expr.rs b/dhall/src/expr.rs
index 30ca6c6..1ce20e3 100644
--- a/dhall/src/expr.rs
+++ b/dhall/src/expr.rs
@@ -25,11 +25,11 @@ pub struct Parsed(pub(crate) SubExpr<X, Import>, pub(crate) ImportRoot);
derive_other_traits!(Parsed);
#[derive(Debug, Clone, Eq)]
-pub struct Resolved(pub(crate) SubExpr<X, X>);
+pub struct Resolved(pub(crate) SubExpr<X, Normalized>);
derive_other_traits!(Resolved);
#[derive(Debug, Clone, Eq)]
-pub struct Typed(pub(crate) SubExpr<X, X>, pub(crate) Option<Type>);
+pub struct Typed(pub(crate) SubExpr<X, Normalized>, pub(crate) Option<Type>);
derive_other_traits!(Typed);
#[derive(Debug, Clone, Eq)]
@@ -67,11 +67,19 @@ impl From<SubExpr<X, X>> for SimpleType {
}
}
+// Exposed for the macros
+#[doc(hidden)]
+impl From<Normalized> for Typed {
+ fn from(x: Normalized) -> Typed {
+ Typed(x.0.absurd(), x.1)
+ }
+}
+
impl Typed {
- pub(crate) fn as_expr(&self) -> &SubExpr<X, X> {
+ pub(crate) fn as_expr(&self) -> &SubExpr<X, Normalized> {
&self.0
}
- pub(crate) fn into_expr(self) -> SubExpr<X, X> {
+ pub(crate) fn into_expr(self) -> SubExpr<X, Normalized> {
self.0
}
}
@@ -80,8 +88,8 @@ impl Normalized {
pub(crate) fn as_expr(&self) -> &SubExpr<X, X> {
&self.0
}
- pub(crate) fn into_expr(self) -> SubExpr<X, X> {
- self.0
+ pub(crate) fn into_expr<T>(self) -> SubExpr<X, T> {
+ self.0.absurd()
}
pub(crate) fn into_type(self) -> Type {
crate::expr::Type(TypeInternal::Expr(Box::new(self)))