class GBTree[A, B] /*with Map[A, B, GBTree[A,B]]*/ { abstract class Tree[A,B]; case class Node[A,B](key:A,value:B,smaller:Node[A,B],bigger:Node[A,B]) extends Tree[A,B]; case class Nil[A,B]() extends Tree[A,B]; }