diff --git a/src/attr.rs b/src/attr.rs
index 387759a..7e14f2d 100644
--- a/src/attr.rs
+++ b/src/attr.rs
@@ -58,12 +58,6 @@
         )
     ));
 
-    named!(quoted<&str, String>, delimited!(
-        punct!("\""),
-        escaped_string,
-        tag_s!("\"")
-    ));
-
     named!(meta_item<&str, MetaItem>, alt_complete!(
         do_parse!(
             ident: word >>
@@ -82,6 +76,12 @@
         |
         map!(word, MetaItem::Word)
     ));
+
+    named!(quoted<&str, String>, delimited!(
+        punct!("\""),
+        escaped_string,
+        tag_s!("\"")
+    ));
 }
 
 #[cfg(feature = "printing")]
diff --git a/src/generics.rs b/src/generics.rs
index 2a00787..05d351f 100644
--- a/src/generics.rs
+++ b/src/generics.rs
@@ -110,7 +110,7 @@
         life: lifetime >>
         bounds: opt_vec!(preceded!(
             punct!(":"),
-            separated_nonempty_list!(punct!(","), lifetime)
+            separated_nonempty_list!(punct!("+"), lifetime)
         )) >>
         (LifetimeDef {
             lifetime: life,
diff --git a/src/item.rs b/src/item.rs
index 7b4a955..d36caae 100644
--- a/src/item.rs
+++ b/src/item.rs
@@ -55,12 +55,12 @@
         ident: word >>
         generics: generics >>
         item: switch!(value!(which),
-            "struct" => map!(struct_body, move |(style, fields)| Item {
+            "struct" => map!(struct_body, move |body| Item {
                 ident: ident,
                 vis: vis,
                 attrs: attrs,
                 generics: generics,
-                body: Body::Struct(style, fields),
+                body: body,
             })
             |
             "enum" => map!(enum_body, move |body| Item {
@@ -75,12 +75,12 @@
         (item)
     ));
 
-    named!(struct_body<&str, (Style, Vec<Field>)>, alt_complete!(
-        struct_like_body => { |fields| (Style::Struct, fields) }
+    named!(struct_body<&str, Body>, alt_complete!(
+        struct_like_body => { |fields| Body::Struct(Style::Struct, fields) }
         |
-        terminated!(tuple_like_body, punct!(";")) => { |fields| (Style::Tuple, fields) }
+        terminated!(tuple_like_body, punct!(";")) => { |fields| Body::Struct(Style::Tuple, fields) }
         |
-        punct!(";") => { |_| (Style::Unit, Vec::new()) }
+        punct!(";") => { |_| Body::Struct(Style::Unit, Vec::new()) }
     ));
 
     named!(enum_body<&str, Body>, do_parse!(
diff --git a/src/lib.rs b/src/lib.rs
index cd7b545..c1951de 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -65,7 +65,7 @@
 
 #[cfg(feature = "parsing")]
 pub fn parse(input: &str) -> Item {
-    match item::parsing::item(input) {
+    return match item::parsing::item(input) {
         nom::IResult::Done(rest, ast) => {
             if rest.is_empty() {
                 ast
@@ -75,22 +75,21 @@
         }
         nom::IResult::Error(err) => raise(err),
         nom::IResult::Incomplete(_) => panic!("incomplete input item"),
-    }
-}
+    };
 
-#[cfg(feature = "parsing")]
-fn raise(mut err: nom::Err<&str>) -> ! {
-    loop {
-        match err {
-            nom::Err::Code(kind) => {
-                panic!("failed to parse {:?}", kind)
-            }
-            nom::Err::Position(kind, pos) => {
-                panic!("failed to parse {:?}: {:?}", kind, pos)
-            }
-            nom::Err::Node(_, next) |
-            nom::Err::NodePosition(_, _, next) => {
-                err = *next;
+    fn raise(mut err: nom::Err<&str>) -> ! {
+        loop {
+            match err {
+                nom::Err::Code(kind) => {
+                    panic!("failed to parse {:?}", kind)
+                }
+                nom::Err::Position(kind, pos) => {
+                    panic!("failed to parse {:?}: {:?}", kind, pos)
+                }
+                nom::Err::Node(_, next) |
+                nom::Err::NodePosition(_, _, next) => {
+                    err = *next;
+                }
             }
         }
     }
diff --git a/src/ty.rs b/src/ty.rs
index 1850258..7b05272 100644
--- a/src/ty.rs
+++ b/src/ty.rs
@@ -224,8 +224,9 @@
         elem: ty >>
         punct!(";") >>
         option!(multispace) >>
-        size: map_res!(digit, str::parse) >>
-        (Ty::FixedLengthVec(Box::new(elem), size))
+        len: map_res!(digit, str::parse) >>
+        punct!("]") >>
+        (Ty::FixedLengthVec(Box::new(elem), len))
     ));
 
     named!(ty_ptr<&str, Ty>, do_parse!(
