Skip to main content

amaru_uplc/
typ.rs

1use crate::arena::Arena;
2
3#[derive(Debug, PartialEq)]
4pub enum Type<'a> {
5    Bool,
6    Integer,
7    String,
8    ByteString,
9    Unit,
10    List(&'a Type<'a>),
11    Array(&'a Type<'a>),
12    Pair(&'a Type<'a>, &'a Type<'a>),
13    Data,
14    Bls12_381G1Element,
15    Bls12_381G2Element,
16    Bls12_381MlResult,
17    Value,
18}
19
20impl<'a> Type<'a> {
21    pub fn integer(arena: &'a Arena) -> &'a Type<'a> {
22        arena.alloc(Type::Integer)
23    }
24
25    pub fn bool(arena: &'a Arena) -> &'a Type<'a> {
26        arena.alloc(Type::Bool)
27    }
28
29    pub fn string(arena: &'a Arena) -> &'a Type<'a> {
30        arena.alloc(Type::String)
31    }
32
33    pub fn byte_string(arena: &'a Arena) -> &'a Type<'a> {
34        arena.alloc(Type::ByteString)
35    }
36
37    pub fn unit(arena: &'a Arena) -> &'a Type<'a> {
38        arena.alloc(Type::Unit)
39    }
40
41    pub fn data(arena: &'a Arena) -> &'a Type<'a> {
42        arena.alloc(Type::Data)
43    }
44
45    pub fn list(arena: &'a Arena, inner: &'a Type<'a>) -> &'a Type<'a> {
46        arena.alloc(Type::List(inner))
47    }
48
49    pub fn array(arena: &'a Arena, inner: &'a Type<'a>) -> &'a Type<'a> {
50        arena.alloc(Type::Array(inner))
51    }
52
53    pub fn pair(arena: &'a Arena, fst: &'a Type<'a>, snd: &'a Type<'a>) -> &'a Type<'a> {
54        arena.alloc(Type::Pair(fst, snd))
55    }
56
57    pub fn g1(arena: &'a Arena) -> &'a Type<'a> {
58        arena.alloc(Type::Bls12_381G1Element)
59    }
60
61    pub fn g2(arena: &'a Arena) -> &'a Type<'a> {
62        arena.alloc(Type::Bls12_381G2Element)
63    }
64
65    pub fn ml_result(arena: &'a Arena) -> &'a Type<'a> {
66        arena.alloc(Type::Bls12_381MlResult)
67    }
68
69    pub fn value(arena: &'a Arena) -> &'a Type<'a> {
70        arena.alloc(Type::Value)
71    }
72}