data Exp = Const Int | Reg Int | Plus Exp Exp | Times Exp Exp data Instr = LoadImm Int | LoadReg Int | AddInstr | MulInstr match select (e : Exp) : Instr = | Plus (Reg a) (Reg b) -> AddInstr | Times (Reg a) (Reg b) -> MulInstr | Const n -> LoadImm n | Reg n -> LoadReg n | _ -> LoadImm 0