The standard library Unsafe api defines access to various datastructures and functions which by-pass the usual compiler type-safeness guarantees. By using this api, you can write code just as flaky and core-dump prone as any C program! This functionality is occasionally used in truly time-critical code to avoid some runtime checks.
In general the best advice when tempted to use this module is — don’t!
The Unsafe api is implemented by the unsafe package.
The Unsafe api source code is in src/lib/std/src/unsafe/unsafe.api.
The above information is manually maintained and may contain errors.
api { package mythryl_callable_c_library_interface : api { exception CFUN_NOT_FOUND String; find_c_function : {fun_name:String, lib_name:String} -> X -> Y; find_c_function' : {fun_name:String, lib_name:String} -> (Ref((X -> Y) ) , (({fun_name:String, io_call:X -> Y, lib_name:String} -> X -> Y) -> Void)); find_c_function'' : {fun_name:String, lib_name:String} -> ((X -> Y) , Ref((X -> Y) ) , (({fun_name:String, io_call:X -> Y, lib_name:String} -> X -> Y) -> Void)); find_c_function''' : {fun_name:String, lib_name:String} -> ( (Y -> X) , Ref((Y -> X) ) , (({fun_name:String, io_call:Y -> X, lib_name:String} -> Y -> X) -> Void) , (Y -> Z) , Ref((Y -> Z) ) , (({fun_name:String, io_call:Y -> X, lib_name:String} -> Y -> Z) -> Void) ); restore_redirected_syscalls_to_direct_form : Void -> Void; System_Constant = {id:Int, name:String}; exception SYSTEM_CONSTANT_NOT_FOUND String; find_system_constant : (String , List(System_Constant )) -> Null_Or(System_Constant ); bind_system_constant : (String , List(System_Constant )) -> System_Constant;};; package unsafe_chunk : api { Chunk; Representation = BYTE_RO_VECTOR | BYTE_RW_VECTOR | FLOAT64 | FLOAT64_RW_VECTOR | LAZY_SUSPENSION | PAIR | RECORD | REF | TYPEAGNOSTIC_RO_VECTOR | TYPEAGNOSTIC_RW_VECTOR | UNBOXED | UNT1 | WEAK_POINTER; to_chunk : X -> Chunk; make_tuple : List(Chunk ) -> Chunk; boxed : Chunk -> Bool; unboxed : Chunk -> Bool; rep : Chunk -> Representation; length : Chunk -> Int; exception REPRESENTATION; to_tuple : Chunk -> List(Chunk ); to_string : Chunk -> String; to_ref : Chunk -> Ref(Chunk ); to_rw_vector : Chunk -> Rw_Vector(Chunk ); to_float64_rw_vector : Chunk -> runtime::asm::Float64_Rw_Vector; to_byte_rw_vector : Chunk -> runtime::asm::Unt8_Rw_Vector; to_vector : Chunk -> ?.Vector(Chunk ); to_byte_vector : Chunk -> ?.vector_of_one_byte_unts::Vector; to_exn : Chunk -> Exception; to_float : Chunk -> Float; to_int : Chunk -> Int; to_int1 : Chunk -> one_word_int::Int; to_unt : Chunk -> Unt; to_unt8 : Chunk -> one_byte_unt::Unt; to_unt1 : Chunk -> one_word_unt::Unt; nth : (Chunk , Int) -> Chunk;};; package software_generated_periodic_events : api { exception BAD_SOFTWARE_GENERATED_PERIODIC_EVENT_INTERVAL; software_generated_periodic_events_switch_refcell__global : Ref(Bool ); set_software_generated_periodic_event_handler : Null_Or((fate::Fate(Void ) -> fate::Fate(Void )) ) -> Void; get_software_generated_periodic_event_handler : Void -> Null_Or((fate::Fate(Void ) -> fate::Fate(Void )) ); set_software_generated_periodic_event_interval : Null_Or(Int ) -> Void; get_software_generated_periodic_event_interval : Void -> Null_Or(Int );};; package vector : api { get : (?.Vector(X ) , Int) -> X; make : (Int , List(X )) -> ?.Vector(X );};; package rw_vector : api { get : (Rw_Vector(X ) , Int) -> X; set : (Rw_Vector(X ) , Int , X) -> Void; make : (Int , X) -> Rw_Vector(X );};; package vector_of_chars : api { Vector = Vector; Element = Element; get : (Vector , Int) -> Element; set : (Vector , Int , Element) -> Void; make : Int -> Vector;};; package rw_vector_of_chars : api { Rw_Vector = Rw_Vector; Element = Element; get : (Rw_Vector , Int) -> Element; set : (Rw_Vector , Int , Element) -> Void; make : Int -> Rw_Vector;};; package vector_of_one_byte_unts : api { Vector = Vector; Element = Element; get : (Vector , Int) -> Element; set : (Vector , Int , Element) -> Void; make : Int -> Vector;};; package rw_vector_of_one_byte_unts : api { Rw_Vector = Rw_Vector; Element = Element; get : (Rw_Vector , Int) -> Element; set : (Rw_Vector , Int , Element) -> Void; make : Int -> Rw_Vector;};; package rw_vector_of_eight_byte_floats : api { Rw_Vector = Rw_Vector; Element = Element; get : (Rw_Vector , Int) -> Element; set : (Rw_Vector , Int , Element) -> Void; make : Int -> Rw_Vector;};; get_handler : Void -> fate::Fate(X ); set_handler : fate::Fate(X ) -> Void; get_current_microthread_register : Void -> X; set_current_microthread_register : X -> Void; get_pseudo : Int -> X; set_pseudo : (X , Int) -> Void; unpickle_datastructure : vector_of_one_byte_unts::Vector -> X; pickle_datastructure : X -> vector_of_one_byte_unts::Vector; boxed : X -> Bool; cast : X -> Y; package p : api { Pervasive_Package_Pickle_List = CONS (vector_of_one_byte_unts::Vector , unsafe_chunk::Chunk , Pervasive_Package_Pickle_List) | NIL;};; pervasive_package_pickle_list__global : Ref(p::Pervasive_Package_Pickle_List ); sigint_fate : Ref(fate::Fate(Void ) ); posix_interprocess_signal_handler_refcell__global : Ref(((Int , Int , fate::Fate(Void )) -> fate::Fate(Void )) );};