(defstruct Cursor [src [u8] ; a non-owning slice pos i32]) ; no initialiser means zeroed (defn peek [c (Ptr Cursor)] u8 (if (< (.pos c) (len (.src c))) (at (.src c) (.pos c)) 0)) (defn advance [c (Ptr Cursor)] () (set (.pos c) (+ (.pos c) 1))) ; field access derefs one level (defn main [] () (let [c (Cursor {.src (bytes "hi")})] ; pos omitted, so pos is 0 (print (peek (addr c))) (println "") (advance (addr c)) (print (peek (addr c))) (println "")))