


Almost all Mythryl values are immutable once created; in the jargon of functional programming, they are pure. In more mainstream nomenclature, they are read-only.
The two exceptions are:
The latter are a concession to the needs of matrix algorithms; they are not often used in vanilla Mythryl coding.
For most practical purposes, the only Mythryl values which can be modified are references, which work much like C pointers:
linux$ cat my-script
#!/usr/bin/mythryl
int_ptr = REF 0;
printf "int_ptr = %d\n" *int_ptr;
int_ptr := 1;
printf "int_ptr = %d\n" *int_ptr;
int_ptr := 2;
printf "int_ptr = %d\n" *int_ptr;
linux$ ./my-script
int_ptr = 0
int_ptr = 1
int_ptr = 2
Here we are seeing true side-effects at work:
The type of a reference cell depends on the type of its contents, and is declared using the Ref type constructor:
Int_Ref = Ref(Int);
Float_Ref = Ref(Float);
String_Ref = Ref(String);
Stringlist_Ref = Ref(List(String));
Record_Ref = Ref(My_Complex_Record_Type);


