Skip to main content

oxilean_codegen/haskell_backend/
haskelldatadecl_traits.rs

1//! # HaskellDataDecl - Trait Implementations
2//!
3//! This module contains trait implementations for `HaskellDataDecl`.
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::HaskellDataDecl;
15use std::fmt;
16
17impl fmt::Display for HaskellDataDecl {
18    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
19        write!(f, "data {}", self.name)?;
20        for p in &self.type_params {
21            write!(f, " {}", p)?;
22        }
23        if self.constructors.is_empty() {
24            return Ok(());
25        }
26        write!(f, "\n  = ")?;
27        for (i, (ctor, fields)) in self.constructors.iter().enumerate() {
28            if i > 0 {
29                write!(f, "\n  | ")?;
30            }
31            write!(f, "{}", ctor)?;
32            for fty in fields {
33                write!(f, " {}", paren_type(fty))?;
34            }
35        }
36        if !self.deriving_clauses.is_empty() {
37            write!(f, "\n  deriving (")?;
38            for (i, d) in self.deriving_clauses.iter().enumerate() {
39                if i > 0 {
40                    write!(f, ", ")?;
41                }
42                write!(f, "{}", d)?;
43            }
44            write!(f, ")")?;
45        }
46        Ok(())
47    }
48}