; defining a custom type define :person [ ; define a new custom type "Person" name ; with fields: name, surname, age surname age ][ ; with custom post-construction initializer init: [ this\name: capitalize this\name ] ; custom print function print: [ render "NAME: |this\name|, SURNAME: |this\surname|, AGE: |this\age|" ] ; custom comparison operator compare: 'age ] ; create a method for our custom type sayHello: function [this][ ensure -> is? :person this print ["Hello" this\name] ] ; create new objects of our custom type a: to :person ["John" "Doe" 34] ; let's create 2 "Person"s b: to :person ["jane" "Doe" 33] ; and another one ; call pseudo-inner method sayHello a ; Hello John sayHello b ; Hello Jane ; access object fields print ["The first person's name is:" a\name] ; The first person's name is: John print ["The second person's name is:" b\name] ; The second person's name is: Jane ; changing object fields a\name: "Bob" sayHello a ; Hello Bob ; verifying object type print type a ; :person print is? :person a ; true ; printing objects print a ; NAME: John, SURNAME: Doe, AGE: 34 ; sorting user objects (using custom comparator) sort @[a b] ; Jane..., John... sort.descending @[a b] ; John..., Jane...