oxilean_codegen/futhark_backend/
futharkloop_traits.rs1use super::types::{FutharkLoop, FutharkLoopKind};
12use std::fmt;
13
14impl std::fmt::Display for FutharkLoop {
15 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
16 let params: Vec<String> = self
17 .params
18 .iter()
19 .map(|(n, t, i)| format!("({n}: {t} = {i})"))
20 .collect();
21 let param_str = params.join(" ");
22 match &self.kind {
23 FutharkLoopKind::For { var, bound } => {
24 write!(
25 f,
26 "loop {} for {var} < {bound} do\n {}",
27 param_str, self.body
28 )
29 }
30 FutharkLoopKind::While { cond } => {
31 write!(f, "loop {} while {} do\n {}", param_str, cond, self.body)
32 }
33 FutharkLoopKind::ForWhile { var, bound, cond } => {
34 write!(
35 f,
36 "loop {} for {var} < {bound} while {} do\n {}",
37 param_str, cond, self.body
38 )
39 }
40 }
41 }
42}