Skip to main content

oxilean_codegen/lcnf/
lcnftype_traits.rs

1//! # LcnfType - Trait Implementations
2//!
3//! This module contains trait implementations for `LcnfType`.
4//!
5//! ## Implemented Traits
6//!
7//! - `Display`
8//!
9//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)
10
11use super::types::LcnfType;
12use std::fmt;
13
14impl fmt::Display for LcnfType {
15    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
16        match self {
17            LcnfType::Erased => write!(f, "erased"),
18            LcnfType::Var(name) => write!(f, "{}", name),
19            LcnfType::Fun(params, ret) => {
20                write!(f, "(")?;
21                for (i, p) in params.iter().enumerate() {
22                    if i > 0 {
23                        write!(f, ", ")?;
24                    }
25                    write!(f, "{}", p)?;
26                }
27                write!(f, ") -> {}", ret)
28            }
29            LcnfType::Ctor(name, args) => {
30                write!(f, "{}", name)?;
31                if !args.is_empty() {
32                    write!(f, "<")?;
33                    for (i, a) in args.iter().enumerate() {
34                        if i > 0 {
35                            write!(f, ", ")?;
36                        }
37                        write!(f, "{}", a)?;
38                    }
39                    write!(f, ">")?;
40                }
41                Ok(())
42            }
43            LcnfType::Object => write!(f, "object"),
44            LcnfType::Nat => write!(f, "nat"),
45            LcnfType::LcnfString => write!(f, "string"),
46            LcnfType::Unit => write!(f, "unit"),
47            LcnfType::Irrelevant => write!(f, "irrelevant"),
48        }
49    }
50}