PLUGIN uri
DEFINE
	TYPE uri.address
	INTERRUPTION uri.bad_address
	INSTRUCTION uri.decode STR -> uri.address
	INSTRUCTION uri.encode uri.address -> STR
	INSTRUCTION uri.new ( 'ABSOLUTE' STR:protocol STR:server INT ?:port | 'RELATIVE' ) STR:address -> uri.address
	INSTRUCTION uri.absolute uri.address -> BLN
	INTERRUPTION uri.bad_type
	INSTRUCTION uri.get_protocol uri.address -> STR
	INSTRUCTION uri.set_protocol MUTABLE uri.address STR
	INSTRUCTION uri.get_server uri.address -> STR
	INSTRUCTION uri.set_server MUTABLE uri.address STR
	INSTRUCTION uri.get_port uri.address -> INT
	INSTRUCTION uri.set_port MUTABLE uri.address INT ?
	INSTRUCTION uri.get_address uri.address -> STR
	INSTRUCTION uri.set_address MUTABLE uri.address STR
	INSTRUCTION uri.get_anchor uri.address -> STR ?
	INSTRUCTION uri.set_anchor MUTABLE uri.address STR ?
	INSTRUCTION uri.get_parameter uri.address STR:key -> STR ?:value
	INSTRUCTION uri.set_parameter MUTABLE uri.address STR:key STR ?:value
	INSTRUCTION uri.get_parameters uri.address -> PTR
	INSTRUCTION uri.set_parameters MUTABLE uri.address PTR
