fork download
  1. trait Generator[+T] {
  2. self =>
  3.  
  4. def generate: T
  5.  
  6. def map[S](f: T => S): Generator[S] = new Generator[S] {
  7. def generate = f(self.generate)
  8. }
  9.  
  10. def flatMap[S](f: T => Generator[S]): Generator[S] = new Generator[S] {
  11. def generate: S = f(self.generate).generate
  12. }
  13. }
  14.  
  15. val numbers = new Generator[Int] {
  16. val rand = new java.util.Random
  17. def generate = rand.nextInt()
  18. }
  19. val booleans = for ( n <- numbers ) yield (n > 0)
  20. println(numbers.generate)
  21. println(booleans.generate)
  22. trait Tree
  23. case class Inner(l: Tree, r: Tree) extends Tree
  24. case class Leaf(n: Int) extends Tree
  25.  
  26. def trees: Generator[Tree] = for {
  27. isLeaf <- booleans
  28. tree <- if (isLeaf) leafs else innerNodes
  29. } yield tree
  30.  
  31.  
  32. def leafs = for {
  33. n <- numbers
  34. } yield Leaf(n)
  35. def innerNodes = for {
  36. l <- trees
  37. r <- trees
  38. } yield Inner(l, r)
  39.  
  40.  
  41.  
  42. println(Leaf(5))
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
/opt/scala/bin/scalac: line 50: /dev/null: Permission denied
Main.scala:15: error: expected class or object definition
val numbers = new Generator[Int] {
^
Main.scala:19: error: expected class or object definition
val booleans = for ( n <- numbers ) yield (n > 0)
^
Main.scala:20: error: expected class or object definition
println(numbers.generate)
^
Main.scala:21: error: expected class or object definition
println(booleans.generate)
^
Main.scala:26: error: expected class or object definition
def trees: Generator[Tree] = for {
^
Main.scala:32: error: expected class or object definition
def leafs = for {
^
Main.scala:35: error: expected class or object definition
def innerNodes = for {
^
Main.scala:42: error: expected class or object definition
println(Leaf(5))
^
8 errors found
spoj: The program compiled successfully, but Main.class was not found.
      Class Main should contain method: def main(args: Array[String]).
stdout
Standard output is empty