def showChars : Nat → String → String.Pos → IO Unit
| 0     _ _   := pure ()
| (n+1) s idx :=
  unless (s.atEnd idx) $
    IO.println (">> " ++ toString (s.get idx)) *>
    showChars n s (s.next idx)

def main : IO UInt32 :=
let s₁             := "hello α_world_β" in
let b : String.Pos := 0 in
let e              := s₁.bsize in
IO.println (s₁.extract b e) *>
IO.println (s₁.extract (b+2) e) *>
IO.println (s₁.extract (b+2) (e-1)) *>
IO.println (s₁.extract (b+2) (e-2)) *>
IO.println (s₁.extract (b+7) e) *>
IO.println (s₁.extract (b+8) e) *>
IO.println (toString e) *>
IO.println (repr "   aaa   ".trim) *>
showChars s₁.length s₁ 0  *>
IO.println ("abc".isPrefixOf "abcd") *>
IO.println ("abcd".isPrefixOf "abcd") *>
IO.println ("".isPrefixOf "abcd") *>
IO.println ("".isPrefixOf "") *>
IO.println ("ab".isPrefixOf "cb") *>
IO.println ("ab".isPrefixOf "a") *>
IO.println ("αb".isPrefixOf "αbc") *>
pure 0
