type t
val create : ?text:string -> string list -> t
val print : prompt:string -> map_out:(string -> string) -> t -> unit
val contents : t -> string
type input = [ `Backspace
| `Char of char
| `Delete
| `Down
| `End
| `Eof
| `Home
| `Left
| `Right
| `Tab
| `Unknown_escape of string * int option * int option
| `Up ]
val step : ?completion:(left:string -> right:string -> string list) -> t -> input -> t