MichelsonInstruction:
    | MichelsonNoArgInstruction
    | InstrX<"DIG" | "DUG" | "SAPLING_EMPTY_STATE", [IntLiteral]>
    | InstrX<
        | "NONE"
        | "LEFT"
        | "RIGHT"
        | "NIL"
        | "CAST", [MichelsonType]>
    | InstrX<
        | "IF_NONE"
        | "IF_LEFT"
        | "IF_CONS"
        | "IF", [InstructionList, InstructionList]>
    | InstrX<
        | "MAP"
        | "ITER"
        | "LOOP"
        | "LOOP_LEFT"
        | "DIP", [InstructionList]>
    | InstrX<"UNPACK", [MichelsonType]>
    | InstrX<"CONTRACT", [MichelsonType]>
    | InstrX<"CREATE_CONTRACT", [MichelsonContract]>
    | InstrX<"PUSH", [MichelsonType, MichelsonData]>
    | InstrX<"EMPTY_SET", [MichelsonType]>
    | InstrX<"EMPTY_MAP", [MichelsonType, MichelsonType]>
    | InstrX<"EMPTY_BIG_MAP", [MichelsonType, MichelsonType]>
    | InstrX<"LAMBDA" | "LAMBDA_REC", [MichelsonType, MichelsonType, InstructionList]>
    | InstrX<"DIP", [IntLiteral, InstructionList] | [InstructionList]>
    | InstrX<"VIEW", [StringLiteral, MichelsonType]>
    | InstrX<"EMIT", [MichelsonType]>
    | InstrPrim<
        | "DROP"
        | "PAIR"
        | "UNPAIR"
        | "DUP"
        | "GET"
        | "UPDATE", [IntLiteral]>