module type Queue =
sig
   type 'a queue 

   val empty : 'a queue
   val is_empty : 'a queue -> bool
   
   val snoc : 'a queue -> 'a -> 'a queue
   val head : 'a queue -> 'a 
   val tail : 'a queue -> 'a queue
end