use id_arena::Id;
pub type LirId = Id<Lir>;
#[derive(Debug, Clone)]
pub enum Lir {
Atom(Vec<u8>),
Path(u32),
Quote(LirId),
Run(LirId, LirId),
Curry(LirId, Vec<LirId>),
Closure(LirId, Vec<LirId>),
First(LirId),
Rest(LirId),
Cons(LirId, LirId),
Listp(LirId),
Add(Vec<LirId>),
Sub(Vec<LirId>),
Mul(Vec<LirId>),
Div(LirId, LirId),
Divmod(LirId, LirId),
Mod(LirId, LirId),
Modpow(LirId, LirId, LirId),
Eq(LirId, LirId),
Gt(LirId, LirId),
GtBytes(LirId, LirId),
Not(LirId),
All(Vec<LirId>),
Any(Vec<LirId>),
If(LirId, LirId, LirId),
Raise(Vec<LirId>),
Concat(Vec<LirId>),
Strlen(LirId),
Substr(LirId, LirId, Option<LirId>),
Logand(Vec<LirId>),
Logior(Vec<LirId>),
Logxor(Vec<LirId>),
Lognot(LirId),
Ash(LirId, LirId),
Lsh(LirId, LirId),
PubkeyForExp(LirId),
G1Add(Vec<LirId>),
G1Subtract(Vec<LirId>),
G1Multiply(LirId, LirId),
G1Negate(LirId),
G1Map(LirId, Option<LirId>),
G2Add(Vec<LirId>),
G2Subtract(Vec<LirId>),
G2Multiply(LirId, LirId),
G2Negate(LirId),
G2Map(LirId, Option<LirId>),
BlsPairingIdentity(Vec<LirId>),
BlsVerify(LirId, Vec<LirId>),
Sha256(Vec<LirId>),
Sha256Inline(Vec<LirId>),
Keccak256(Vec<LirId>),
CoinId(LirId, LirId, LirId),
K1Verify(LirId, LirId, LirId),
R1Verify(LirId, LirId, LirId),
}