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