Skip to main content

oxilean_codegen/haskell_backend/
haskellpattern_traits.rs

1//! # HaskellPattern - Trait Implementations
2//!
3//! This module contains trait implementations for `HaskellPattern`.
4//!
5//! ## Implemented Traits
6//!
7//! - `Display`
8//!
9//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)
10
11use crate::lcnf::*;
12
13use super::functions::*;
14use super::types::HaskellPattern;
15use std::fmt;
16
17impl fmt::Display for HaskellPattern {
18    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
19        match self {
20            HaskellPattern::Wildcard => write!(f, "_"),
21            HaskellPattern::Var(v) => write!(f, "{}", v),
22            HaskellPattern::Lit(lit) => write!(f, "{}", lit),
23            HaskellPattern::Tuple(pats) => {
24                write!(f, "(")?;
25                for (i, p) in pats.iter().enumerate() {
26                    if i > 0 {
27                        write!(f, ", ")?;
28                    }
29                    write!(f, "{}", p)?;
30                }
31                write!(f, ")")
32            }
33            HaskellPattern::List(pats) => {
34                write!(f, "[")?;
35                for (i, p) in pats.iter().enumerate() {
36                    if i > 0 {
37                        write!(f, ", ")?;
38                    }
39                    write!(f, "{}", p)?;
40                }
41                write!(f, "]")
42            }
43            HaskellPattern::Cons(head, tail) => write!(f, "({} : {})", head, tail),
44            HaskellPattern::Constructor(name, args) => {
45                write!(f, "{}", name)?;
46                for a in args {
47                    write!(f, " {}", paren_pattern(a))?;
48                }
49                Ok(())
50            }
51            HaskellPattern::As(name, pat) => write!(f, "{}@{}", name, paren_pattern(pat)),
52            HaskellPattern::LazyPat(pat) => write!(f, "~{}", paren_pattern(pat)),
53        }
54    }
55}