use std::fmt;
#[derive(Clone, Debug, PartialEq)]
pub struct Bind<P, T> {
pattern: P,
body: T,
}
impl<P, T> Bind<P, T> {
pub fn new(pattern: P, body: T) -> Self {
Bind { pattern, body }
}
pub fn unbind(self) -> (P, T) {
(self.pattern, self.body)
}
pub fn pattern(&self) -> &P {
&self.pattern
}
pub fn body(&self) -> &T {
&self.body
}
}
impl<P: fmt::Display, T: fmt::Display> fmt::Display for Bind<P, T> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "<{}> {}", self.pattern, self.body)
}
}