oxilean_codegen/haskell_backend/
haskellpattern_traits.rs1use 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}