 oddLengthArrays.generate.count
 oddLengthArrays.generate.count
 
-//: Generators also admit functional methods like `map` and `flatMap`, but with different names than you might
-//: be used to.
+//: Generators also admit functional methods like `map` and `flatMap`, but with different names than
+//: you might be used to.
 
 // `fmap` (function map) works exactly like Array's `map` method; it applies the function to any 
 // values it generates.

onlyFive.generate
onlyFive.generate

// `Gen.fromElementsIn` constructs a generator that pulls values from inside the 
// bounds of the given Range.  Because generation is random, some values may be repeated.
let fromOnetoFive = Gen<Int>.fromElementsIn(1...5)

fromOnetoFive.generate

generatorBoundedSizeArrays_.generate
generatorBoundedSizeArrays_.generate

//: Now that you've seen what generators can do, we'll use all we've learned to create a generator 
//: that produces email addresses.  To do this, we'll need one more operator/method notated `<*>` or
//: `ap`. `ap` comes from 
//: [Applicative Functors](http://staff.city.ac.uk/~ross/papers/Applicative.html) and is used to 
//: "zip together" `Gen`erators of functions with `Gen`erators of of values, applying each function 
//: during the zipping phase.  That definition is a little hand-wavey and technical, so for now 
//: we'll say that `ap` works like "glue" that sticks special kinds of generators togethers.
//:
//: For our purposes, we will say that an email address consists of 3 parts: A local part, a 
//: hostname, and a Top-Level Domain each separated by an `@`, and a `.` respectively.
//:
//: According to RFC 2822, the local part can consist of uppercase characters, lowercase letters, 
//: numbers, and certain kinds of special characters.  We already have generators for upper and 
//: lower cased letters, so all we need are special characters and a more complete number generator:

let numeric : Gen<Character> = Gen<Character>.fromElementsIn("0"..."9")
let special : Gen<Character> = Gen<Character>.fromElementsOf(["!", "#", "$", "%", "&", "'", "*", "+", "-", "/", "=", "?", "^", "_", "`", "{", "|", "}", "~", "."])
