Reference pattern
diff --git a/src/expr.rs b/src/expr.rs
index 1b9a7d5..9b9ab2c 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -887,7 +887,8 @@
         |
         pat_tuple
         // TODO: Box
-        // TODO: Ref
+        |
+        pat_ref
         |
         pat_lit
         // TODO: Vec
@@ -947,6 +948,13 @@
         })
     ));
 
+    named!(pat_ref -> Pat, do_parse!(
+        punct!("&") >>
+        mutability: mutability >>
+        pat: pat >>
+        (Pat::Ref(Box::new(pat), mutability))
+    ));
+
     named!(pat_lit -> Pat, map!(lit, |lit| Pat::Lit(Box::new(lit))));
 
     named!(pat_range -> Pat, do_parse!(
@@ -1395,7 +1403,11 @@
                     tokens.append("box");
                     inner.to_tokens(tokens);
                 }
-                Pat::Ref(ref _target, _mutability) => unimplemented!(),
+                Pat::Ref(ref target, mutability) => {
+                    tokens.append("&");
+                    mutability.to_tokens(tokens);
+                    target.to_tokens(tokens);
+                }
                 Pat::Lit(ref lit) => lit.to_tokens(tokens),
                 Pat::Range(ref lo, ref hi) => {
                     lo.to_tokens(tokens);