You need to include module /pliant/language/compiler.pli when using Expression data type.
See pliant computing mechanism for a general introduction on meta-programming

Fields in the Instruction data type:
Field name Type Content
function Link Function
arguments Array An array of arrows to the arguments (the type of an argument being ... 'Argument')
jump Pointer Instruction

Other fields in the Instruction data type, that are not used while compiling but rather while optimizing and generating code:
next_instruction Link Instruction used to link the various instructions
previous_instruction Pointer Instruction same
position Str Position in the source code of the expression that first recorded this instruction
section Int The code of a function is divided in several sections (the sections are defined in generator_context.pli)
order Int The instructions in a function are ordered. When you have two points to instructions, the 'order' field will tel you which is the first one, so how to follow the instructions list from one to the other one.
stack_delta Int used by Pliant internal machinery while generating code in order to record the stack offset at each instruction
backward_jumps List All the instructions of the function that contain a jump field pointing to this one.
user_field address You may use this one to store datas while executing your algorithm. If you do so, you have to clear it before leaving.


method i size -> s
  arg Int i ; arg_C Int s

Returns the number of arguments in the instruction.
This is not the prototype of a real methods but indicates that you can also use size method to change the number of sub expressions in the expression just like you can use size method to resize a variable size array.

method i '' u -> a
  arg Instruction i ; arg Int u ; arg_C (Link Argument) a

Selects one of the arguments


function instruction function [argument1 argument2 ...] [jump target] -> i
  arg Function function ; [arg Argument argument1 argument2 ...] ; [arg Instruction target] ; arg Instruction i

Builds a new instruction.