oxilean_codegen/haskell_backend/
haskelllit_traits.rs1use crate::lcnf::*;
12
13use super::types::HaskellLit;
14use std::fmt;
15
16impl fmt::Display for HaskellLit {
17 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
18 match self {
19 HaskellLit::Int(n) => {
20 if *n < 0 {
21 write!(f, "({})", n)
22 } else {
23 write!(f, "{}", n)
24 }
25 }
26 HaskellLit::Float(v) => {
27 if v.fract() == 0.0 && v.is_finite() {
28 write!(f, "{}.0", *v as i64)
29 } else {
30 write!(f, "{}", v)
31 }
32 }
33 HaskellLit::Char(c) => write!(f, "'{}'", c),
34 HaskellLit::Bool(b) => write!(f, "{}", if *b { "True" } else { "False" }),
35 HaskellLit::Unit => write!(f, "()"),
36 HaskellLit::Str(s) => {
37 write!(f, "\"")?;
38 for c in s.chars() {
39 match c {
40 '"' => write!(f, "\\\"")?,
41 '\\' => write!(f, "\\\\")?,
42 '\n' => write!(f, "\\n")?,
43 '\r' => write!(f, "\\r")?,
44 '\t' => write!(f, "\\t")?,
45 c => write!(f, "{}", c)?,
46 }
47 }
48 write!(f, "\"")
49 }
50 }
51 }
52}