diff --git a/src/model_03.rs b/src/model_03.rs index 832e345..6dcb30a 100644 --- a/src/model_03.rs +++ b/src/model_03.rs @@ -1,4 +1,5 @@ use std::{ + fmt::Display, marker::PhantomData, pin::Pin, task::{Context, Poll}, @@ -383,9 +384,26 @@ pub trait AsTrace { pub enum Trace<'trace> { Pure, - Flatten(&'trace dyn AsTrace, &'trace dyn AsTrace), Map(&'trace dyn AsTrace), Join(&'trace dyn AsTrace, &'trace dyn AsTrace), + Flatten(&'trace dyn AsTrace, &'trace dyn AsTrace), +} + +impl Display for &dyn AsTrace { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", self.as_trace()) + } +} + +impl Display for Trace<'_> { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Self::Pure => write!(f, "."), + Self::Map(a) => write!(f, "{a}*"), + Self::Join(a, b) => write!(f, "({a},{b})"), + Self::Flatten(o, i) => write!(f, "{{{o};{i}}}"), + } + } } impl AsTrace for TracePure {