
type t
    
exception Empty_level of int
    
val create : unit -> t
    
(** Returns the next card for the indicated level *)
val next_card : t -> int -> Deck.card

(** Returns the number of cards in the requested level *)
val count : t -> int -> int

(** Returns the highest level card that exists *)
val max : t -> int

(** Returns the lowest level card that exists *)
val min : t -> int
    
(** Mutates the model, appropriately moving the top card
  of the indicated level *)
val correct : t -> int -> unit
val incorrect : t -> int -> unit
    
(** Creates a new set of cardboxes *)
val of_deck : Deck.t -> t

(** Spits it back to a deck *)
val to_deck : t -> Deck.t
