diff --git a/doc/site/modularity.markdown b/doc/site/modularity.markdown
index 5c215056..0d62bb03 100644
--- a/doc/site/modularity.markdown
+++ b/doc/site/modularity.markdown
@@ -306,5 +306,19 @@ This sounds super hairy, but that's because cyclic dependencies are hairy in
general. The key point here is that Wren *can* handle them in the rare cases
where you need them.
+## Exiting a module early
+
+Although the `return` statement is normally used to exit from a [method](classes.html#methods) or a [function](functions.html), it can also be used from a module's top-level code to exit the module. For example, if the script consists of a single module, this code would exit the module (and therefore the script) early:
+
+
+for (i in 1..2) {
+ if (i == 2) return
+ System.print(i) //> prints 1 but not 2
+}
+System.print(3) //> not reached
+
+
+Although it is not invalid to return a value, there is no way to access that value and it is therefore simply discarded.
+
← Error Handling
diff --git a/test/language/module/returns/module_return.wren b/test/language/module/returns/module_return.wren
new file mode 100644
index 00000000..1d152ce7
--- /dev/null
+++ b/test/language/module/returns/module_return.wren
@@ -0,0 +1,4 @@
+// nontest
+System.print("foo")
+return
+System.print("bar")
diff --git a/test/language/module/returns/module_return_value.wren b/test/language/module/returns/module_return_value.wren
new file mode 100644
index 00000000..d96d65f4
--- /dev/null
+++ b/test/language/module/returns/module_return_value.wren
@@ -0,0 +1,4 @@
+// nontest
+System.print("foo")
+return 42
+System.print("bar")
diff --git a/test/language/module/returns/return.wren b/test/language/module/returns/return.wren
new file mode 100644
index 00000000..bc647a4e
--- /dev/null
+++ b/test/language/module/returns/return.wren
@@ -0,0 +1,3 @@
+System.print("foo") // expect: foo
+return
+System.print("bar")
diff --git a/test/language/module/returns/return_from_import.wren b/test/language/module/returns/return_from_import.wren
new file mode 100644
index 00000000..3fbc3cf7
--- /dev/null
+++ b/test/language/module/returns/return_from_import.wren
@@ -0,0 +1,5 @@
+import "./module_return"
+
+System.print("baz")
+// expect: foo
+// expect: baz
diff --git a/test/language/module/returns/return_value.wren b/test/language/module/returns/return_value.wren
new file mode 100644
index 00000000..eb821e9f
--- /dev/null
+++ b/test/language/module/returns/return_value.wren
@@ -0,0 +1,3 @@
+System.print("foo") // expect: foo
+return 42
+System.print("bar")
diff --git a/test/language/module/returns/return_value_from_import.wren b/test/language/module/returns/return_value_from_import.wren
new file mode 100644
index 00000000..a092d8bd
--- /dev/null
+++ b/test/language/module/returns/return_value_from_import.wren
@@ -0,0 +1,5 @@
+import "./module_return_value"
+
+System.print("baz")
+// expect: foo
+// expect: baz