Index: doc/proposals/iterators.md
===================================================================
--- doc/proposals/iterators.md	(revision 8baa40aaeca1dd3729e9ee2fb70d5e4020362930)
+++ doc/proposals/iterators.md	(revision 4d3666d8fb91199372a50623959c1094b834e1b5)
@@ -2,5 +2,5 @@
 =========
 This is the proposal for adding iterators to Cforall and the standard
-libary. Iterators provide a common interface for sequences of values in
+library. Iterators provide a common interface for sequences of values in
 the language. Many inputs and outputs can be described in terms of sequences,
 creating a common interface that can be used in many places.
@@ -15,9 +15,9 @@
 The operation is "get the next value in the sequence", but this actually has
 several parts, in that it has to check if there are move values, return the
-next one if there is, and update any internal information in the iterator.
+next one if there is one, and update any internal information in the iterator.
 For example: `Maybe(Item) next(Iter &);`.
 
 Now, iterators can have other operations. Notably, they are often also
-iterables that return themselves. They can also have a veriaty of iterator
+iterables that return themselves. They can also have a verity of iterator
 transformers built in.
 
@@ -25,5 +25,5 @@
 
 Anything that you can get an iterator from is called an iterable. There
-is an operation to get an iterator from an iterator.
+is an operation to get an iterator from an iterable.
 
 Range For Loop
@@ -31,5 +31,5 @@
 One part of the language that could be reworked to make good use of this is
 for loops. In short, remove most of the special rules that can be done inside
-the identifer and make it a generic range for loop:
+the identifier and make it a generic range for loop:
 
     ```
@@ -39,12 +39,12 @@
 The common way to implement this is that expression produces an iterable.
 The for loop gets an iterator from the iterable (which is why iterators are
-often iterables, so they can be passed in with the same iterface) and stores
+often iterables, so they can be passed in with the same interface) and stores
 it. Then, for each value in the iterator, the loop binds the value to the
 identifier and then executes the statement. The loop exits after every value
-has been used and the iterator is exausted.
+has been used and the iterator is exhausted.
 
 For the chained for loop (`for (i; _: j; _)`) can still have its existing
 behaviour, advancing through each range in parallel and stopping as soon
-as the first one is exausted.
+as the first one is exhausted.
 
 Ranges
@@ -54,5 +54,5 @@
 logically instead of by copy.
 
-The purpose of this container is to bridge the new iterator iterfaces with
+The purpose of this container is to bridge the new iterator interfaces with
 the existing range syntax. The range syntax would become an operator that
 returns a range object, which can be used as any other type.
@@ -91,5 +91,5 @@
 pointers.
 
-Rust also has a imparative implementation of a functional style of iterators,
+Rust also has a imperative implementation of a functional style of iterators,
 including a great number of standard transformers. Otherwise, it is very
 similar to Python.
