1use std::collections::HashMap;
2
3use mir::{
4 ty::{ConcEffect, ConcType},
5 MirId,
6};
7
8use crate::eval_mir::Handler;
9
10#[cfg_attr(feature = "withserde", derive(serde::Serialize, serde::Deserialize))]
11#[derive(Clone, Debug, PartialEq)]
12pub enum Value {
13 String(String),
14 Int(i64),
15 Float(f64),
16 Rational(i64, i64),
17 Tuple(Vec<Value>),
18 Variant { id: usize, value: Box<Value> },
19 FnRef(FnRef),
20}
21
22#[cfg_attr(feature = "withserde", derive(serde::Serialize, serde::Deserialize))]
23#[derive(Debug, Clone, PartialEq)]
24pub enum FnRef {
25 Link(ConcType),
26 Closure(Closure),
27 Recursion,
28}
29
30#[cfg_attr(feature = "withserde", derive(serde::Serialize, serde::Deserialize))]
31#[derive(Debug, Clone, PartialEq)]
32pub struct Closure {
33 pub mir: MirId,
34 pub captured: HashMap<ConcType, Value>,
35 pub handlers: HashMap<ConcEffect, Handler>,
36}