Advertisement
Guest User

Untitled

a guest
Apr 15th, 2015
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 0.91 KB | None | 0 0
  1.   case class Inner(left: Tree, right: Tree) extends Tree
  2.   case class Leaf(i: Int) extends Tree
  3.  
  4.     abstract class Generator[+T] {
  5.     self =>
  6.      
  7.     def generate: T
  8.    
  9.     def map[S](f: T => S): Generator[S] = new Generator[S] {
  10.       def generate = f(self.generate)
  11.     }
  12.  
  13.     def flatMap[S](f: T => Generator[S]): Generator[S] = new Generator[S] {
  14.       def generate = f(self.generate).generate
  15.     }
  16.   }
  17.  
  18.   val integers = new Generator[Int] {
  19.     val rand = new Random
  20.     def generate: Int = rand.nextInt()
  21.  
  22.   }
  23.  
  24.   val booleans: Generator[Boolean] = for{
  25.     x <- integers
  26.   } yield x > 0
  27.  
  28.  
  29.   val trees: Generator[Tree] = for{
  30.     isLeaf <- booleans
  31.     tree <- if(isLeaf) leaves else inners
  32.   } yield tree
  33.  
  34.   val leaves: Generator[Leaf] = for{
  35.     i <- integers
  36.   } yield Leaf(i)
  37.  
  38.   val inners: Generator[Inner] = for{
  39.     i <- trees
  40.     j <- trees
  41.   } yield Inner(i, j)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement