diff --git a/src/MAT.jl b/src/MAT.jl
index a11efee..9088734 100644
--- a/src/MAT.jl
+++ b/src/MAT.jl
@@ -117,6 +117,44 @@ Compression on reading is detected/handled automatically; the `compress`
 keyword argument only affects write operations.
 
 Use with `read`, `write`, `close`, `keys`, and `haskey`.
+
+## Examples
+
+### Usage with `read`
+
+```julia-repl
+julia> matwrite("test.mat", Dict("foo" => 1, "bar" => 2)) # create file
+julia> file = matopen("test.mat")
+julia> read(file) # get a dictionary of `key => value` pairs
+julia> read(file, "foo") # read a specific variable
+julia> close(file)
+```
+
+### Usage with `write`
+
+```julia-repl
+julia> matwrite("test.mat", Dict("foo" => 1, "bar" => 2)) # create file
+julia> file = matopen("test.mat", "w+")
+julia> write(file, "baz", 3) # test.mat now contains the variable "baz"
+julia> close(file)
+```
+
+```julia-repl
+julia> matwrite("test.mat", Dict("foo" => 1, "bar" => 2)) # create file
+julia> file = matopen("test.mat", "w")
+julia> write(file, "bop", 3) # test.mat now ONLY contains the variable "bop"
+julia> close(file)
+```
+
+### Usage with `keys` and `haskey`
+
+```julia-repl
+julia> matwrite("test.mat", Dict("foo" => 1, "bar" => 2)) # create file
+julia> file = matopen("test.mat")
+julia> keys(file) # ["bar", "foo"]
+julia> haskey(file, "bar") # true
+julia> close(file)
+```
 """
 matopen
 
@@ -126,6 +164,15 @@ matopen
 
 Return a dictionary of all the variables and values in a Matlab file,
 opening and closing it automatically.
+
+### Example
+
+```julia-repl
+julia> matwrite("test.mat", Dict("foo" => 1, "bar" => 2)) # create file
+julia> data = matread("test.mat")
+julia> keys(data) # KeySet containing "foo" and "bar"
+julia> data["foo"] # 1
+```
 """
 function matread(filename::AbstractString)
     file = matopen(filename)
@@ -140,10 +187,55 @@ end
 
 # Write a dict to a MATLAB file
 """
-    matwrite(filename, d::Dict; compress::Bool = false, version::String)
+    matwrite(filename, d::Dict; compress::Bool = false, version::String = "")
 
 Write a dictionary containing variable names as keys and values as values
 to a Matlab file, opening and closing it automatically.
+
+### Arguments
+
+- `filename`: The name of the output file. If `filename` already exists, \
+its contents will be completely replaced.
+- `d`: A dictionary of `key => value` pairs to write. 
+  - `key` should be a `String` that starts with a letter and contain only alphanumeric characters and underscores.
+  - `value` should be `<:Number`, `Array{<:Number}`, `String`, or `Bool`. `Tuple`, \
+  `Nothing` and custom `struct`s will not work.
+
+### Optional Arguments
+
+- `compress`: If `true`, the output data are compressed. Default `false`.
+- `version`: A `String` giving the target version. If equal to `"v4"`, \
+write to Matlab v4, otherwise write to Matlab v7.3. Default `""`.
+
+### Examples
+
+Write a dictionary of various types:
+
+```julia-repl
+julia> d = Dict(
+    "var1" => 1,
+    "var2" => 4.0 + 5.0*im,
+    "var3" => [1.0, 2.0, 3.0],
+    "var4" => rand(UInt8, 4, 4),
+    "var5" => true,
+    "var6" => "foo")
+julia> matwrite("test.mat", d)
+```
+
+Add a variable to an existing file:
+
+```julia-repl
+julia> d = Dict{String, Any}("var7" => "bar") # note use of `Any`
+julia> merge!(d, matread("test.mat"))
+julia> matwrite("test.mat", d) # "var7" is added to test.mat
+```
+
+Completely replace an existing file:
+
+```julia-repl
+julia> d = Dict{String, Any}("foo" => "bar")
+julia> matwrite("test.mat", d) # "foo" is now the only variable in test.mat
+```
 """
 function matwrite(filename::AbstractString, dict::AbstractDict{S, T}; compress::Bool = false, version::String ="") where {S, T}