Put remaining cursor last
diff --git a/src/attr.rs b/src/attr.rs
index b95ac9f..e25121b 100644
--- a/src/attr.rs
+++ b/src/attr.rs
@@ -427,11 +427,11 @@
                 let literal = lit.to_string();
                 if literal.starts_with("//") || literal.starts_with("/*") {
                     Ok((
-                        rest,
                         TokenTree {
                             span: span,
                             kind: TokenNode::Literal(lit),
                         },
+                        rest,
                     ))
                 } else {
                     parse_error()
diff --git a/src/delimited.rs b/src/delimited.rs
index 2136f03..c6e9d9d 100644
--- a/src/delimited.rs
+++ b/src/delimited.rs
@@ -285,7 +285,7 @@
             parse: fn(Cursor) -> PResult<T>,
         ) -> PResult<Self> {
             match Self::parse(input, parse, false) {
-                Ok((_, ref b)) if b.is_empty() => parse_error(),
+                Ok((ref b, _)) if b.is_empty() => parse_error(),
                 other => other,
             }
         }
@@ -302,7 +302,7 @@
             parse: fn(Cursor) -> PResult<T>,
         ) -> PResult<Self> {
             match Self::parse(input, parse, true) {
-                Ok((_, ref b)) if b.is_empty() => parse_error(),
+                Ok((ref b, _)) if b.is_empty() => parse_error(),
                 other => other,
             }
         }
@@ -316,8 +316,8 @@
 
             // get the first element
             match parse(input) {
-                Err(_) => Ok((input, res)),
-                Ok((i, o)) => {
+                Err(_) => Ok((res, input)),
+                Ok((o, i)) => {
                     if i == input {
                         return parse_error();
                     }
@@ -325,13 +325,13 @@
                     res.push(o);
 
                     // get the separator first
-                    while let Ok((i2, s)) = D::parse(input) {
+                    while let Ok((s, i2)) = D::parse(input) {
                         if i2 == input {
                             break;
                         }
 
                         // get the element next
-                        if let Ok((i3, o3)) = parse(i2) {
+                        if let Ok((o3, i3)) = parse(i2) {
                             if i3 == i2 {
                                 break;
                             }
@@ -343,12 +343,12 @@
                         }
                     }
                     if terminated {
-                        if let Ok((after, sep)) = D::parse(input) {
+                        if let Ok((sep, after)) = D::parse(input) {
                             res.push_trailing(sep);
                             input = after;
                         }
                     }
-                    Ok((input, res))
+                    Ok((res, input))
                 }
             }
         }
diff --git a/src/error.rs b/src/error.rs
index 72a25e8..a9f8c39 100644
--- a/src/error.rs
+++ b/src/error.rs
@@ -3,7 +3,7 @@
 use std::fmt::{self, Display};
 
 /// The result of a parser
-pub type PResult<'a, O> = Result<(Cursor<'a>, O), ParseError>;
+pub type PResult<'a, O> = Result<(O, Cursor<'a>), ParseError>;
 
 /// An error with a default error message.
 ///
diff --git a/src/ident.rs b/src/ident.rs
index 21a5cbd..e61f801 100644
--- a/src/ident.rs
+++ b/src/ident.rs
@@ -251,11 +251,11 @@
             }
 
             Ok((
-                rest,
                 Ident {
                     span: span,
                     term: term,
                 },
+                rest,
             ))
         }
 
diff --git a/src/lib.rs b/src/lib.rs
index 992d547..23b765f 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -184,7 +184,7 @@
     let buf = SynomBuffer::new(tokens);
     let result = T::parse(buf.begin());
     let err = match result {
-        Ok((rest, t)) => {
+        Ok((t, rest)) => {
             if rest.eof() {
                 return Ok(t);
             } else if rest == buf.begin() {
diff --git a/src/lifetime.rs b/src/lifetime.rs
index 8c47dba..2714145 100644
--- a/src/lifetime.rs
+++ b/src/lifetime.rs
@@ -108,11 +108,11 @@
             }
 
             Ok((
-                rest,
                 Lifetime {
                     term: term,
                     span: span,
                 },
+                rest,
             ))
         }
 
diff --git a/src/lit.rs b/src/lit.rs
index 539e30d..23f8a3a 100644
--- a/src/lit.rs
+++ b/src/lit.rs
@@ -106,11 +106,11 @@
         fn parse(input: Cursor) -> PResult<Self> {
             match input.literal() {
                 Some((span, lit, rest)) => Ok((
-                    rest,
                     Lit {
                         span: span,
                         value: LitKind::Other(lit),
                     },
+                    rest,
                 )),
                 _ => match input.term() {
                     Some((span, term, rest)) => {
@@ -123,11 +123,11 @@
                         };
 
                         Ok((
-                            rest,
                             Lit {
                                 span: span,
                                 value: kind,
                             },
+                            rest,
                         ))
                     }
                     _ => parse_error(),
diff --git a/src/parsers.rs b/src/parsers.rs
index cfef607..4049fe3 100644
--- a/src/parsers.rs
+++ b/src/parsers.rs
@@ -89,7 +89,7 @@
         eprintln!(concat!(" -> ", stringify!($fun), " @ {:?}"), i);
         let r = $fun(i $(, $args)*);
         match r {
-            Ok((i, _)) => eprintln!(concat!("OK  ", stringify!($fun), " @ {:?}"), i),
+            Ok((_, i)) => eprintln!(concat!("OK  ", stringify!($fun), " @ {:?}"), i),
             Err(_) => eprintln!(concat!("ERR ", stringify!($fun), " @ {:?}"), i),
         }
         r
@@ -173,8 +173,8 @@
         match $submac!($i, $($args)*) {
             ::std::result::Result::Err(err) =>
                 ::std::result::Result::Err(err),
-            ::std::result::Result::Ok((i, o)) =>
-                ::std::result::Result::Ok((i, $crate::parsers::invoke($g, o))),
+            ::std::result::Result::Ok((o, i)) =>
+                ::std::result::Result::Ok(($crate::parsers::invoke($g, o), i)),
         }
     };
 
@@ -220,7 +220,7 @@
         match $submac!($i, $($args)*) {
             ::std::result::Result::Ok(_) => $crate::parse_error(),
             ::std::result::Result::Err(_) =>
-                ::std::result::Result::Ok(($i, ())),
+                ::std::result::Result::Ok(((), $i)),
         }
     };
 }
@@ -286,12 +286,12 @@
     ($i:expr, $cond:expr, $submac:ident!( $($args:tt)* )) => {
         if $cond {
             match $submac!($i, $($args)*) {
-                ::std::result::Result::Ok((i, o)) =>
-                    ::std::result::Result::Ok((i, ::std::option::Option::Some(o))),
+                ::std::result::Result::Ok((o, i)) =>
+                    ::std::result::Result::Ok((::std::option::Option::Some(o), i)),
                 ::std::result::Result::Err(x) => ::std::result::Result::Err(x),
             }
         } else {
-            ::std::result::Result::Ok(($i, ::std::option::Option::None))
+            ::std::result::Result::Ok((::std::option::Option::None, $i))
         }
     };
 
@@ -425,16 +425,16 @@
 
         loop {
             if input.eof() {
-                ret = ::std::result::Result::Ok((input, res));
+                ret = ::std::result::Result::Ok((res, input));
                 break;
             }
 
             match $submac!(input, $($args)*) {
                 ::std::result::Result::Err(_) => {
-                    ret = ::std::result::Result::Ok((input, res));
+                    ret = ::std::result::Result::Ok((res, input));
                     break;
                 }
-                ::std::result::Result::Ok((i, o)) => {
+                ::std::result::Result::Ok((o, i)) => {
                     // loop trip must always consume (otherwise infinite loops)
                     if i == input {
                         ret = $crate::parse_error();
@@ -465,14 +465,14 @@
 
     loop {
         if input.eof() {
-            return Ok((input, res));
+            return Ok((res, input));
         }
 
         match f(input) {
             Err(_) => {
-                return Ok((input, res));
+                return Ok((res, input));
             }
-            Ok((i, o)) => {
+            Ok((o, i)) => {
                 // loop trip must always consume (otherwise infinite loops)
                 if i == input {
                     return parse_error();
@@ -561,7 +561,7 @@
     ($i:expr, $submac:ident!( $($args:tt)* ), $($p:pat => $subrule:ident!( $($args2:tt)* ))|* ) => {
         match $submac!($i, $($args)*) {
             ::std::result::Result::Err(err) => ::std::result::Result::Err(err),
-            ::std::result::Result::Ok((i, o)) => match o {
+            ::std::result::Result::Ok((o, i)) => match o {
                 $(
                     $p => $subrule!(i, $($args2)*),
                 )*
@@ -651,7 +651,7 @@
 #[macro_export]
 macro_rules! value {
     ($i:expr, $res:expr) => {
-        ::std::result::Result::Ok(($i, $res))
+        ::std::result::Result::Ok(($res, $i))
     };
 }
 
@@ -721,7 +721,7 @@
         match $submac!($i, $($args)*) {
             ::std::result::Result::Err(err) =>
                 ::std::result::Result::Err(err),
-            ::std::result::Result::Ok((i, o)) =>
+            ::std::result::Result::Ok((o, i)) =>
                 tuple_parser!(i, (o), $($rest)*),
         }
     };
@@ -730,7 +730,7 @@
         match $submac!($i, $($args)*) {
             ::std::result::Result::Err(err) =>
                 ::std::result::Result::Err(err),
-            ::std::result::Result::Ok((i, o)) =>
+            ::std::result::Result::Ok((o, i)) =>
                 tuple_parser!(i, ($($parsed)* , o), $($rest)*),
         }
     };
@@ -747,13 +747,13 @@
         match $submac!($i, $($args)*) {
             ::std::result::Result::Err(err) =>
                 ::std::result::Result::Err(err),
-            ::std::result::Result::Ok((i, o)) =>
-                ::std::result::Result::Ok((i, ($($parsed),*, o))),
+            ::std::result::Result::Ok((o, i)) =>
+                ::std::result::Result::Ok((($($parsed),*, o), i)),
         }
     };
 
     ($i:expr, ($($parsed:expr),*)) => {
-        ::std::result::Result::Ok(($i, ($($parsed),*)))
+        ::std::result::Result::Ok((($($parsed),*), $i))
     };
 }
 
@@ -796,8 +796,8 @@
 
     ($i:expr, $subrule:ident!( $($args:tt)* ) => { $gen:expr } | $($rest:tt)+) => {
         match $subrule!($i, $($args)*) {
-            ::std::result::Result::Ok((i, o)) =>
-                ::std::result::Result::Ok((i, $crate::parsers::invoke($gen, o))),
+            ::std::result::Result::Ok((o, i)) =>
+                ::std::result::Result::Ok(($crate::parsers::invoke($gen, o), i)),
             ::std::result::Result::Err(_) => alt!($i, $($rest)*),
         }
     };
@@ -812,8 +812,8 @@
 
     ($i:expr, $subrule:ident!( $($args:tt)* ) => { $gen:expr }) => {
         match $subrule!($i, $($args)*) {
-            ::std::result::Result::Ok((i, o)) =>
-                ::std::result::Result::Ok((i, $crate::parsers::invoke($gen, o))),
+            ::std::result::Result::Ok((o, i)) =>
+                ::std::result::Result::Ok(($crate::parsers::invoke($gen, o), i)),
             ::std::result::Result::Err(err) =>
                 ::std::result::Result::Err(err),
         }
@@ -876,7 +876,7 @@
 #[macro_export]
 macro_rules! do_parse {
     ($i:expr, ( $($rest:expr),* )) => {
-        ::std::result::Result::Ok(($i, ( $($rest),* )))
+        ::std::result::Result::Ok((( $($rest),* ), $i))
     };
 
     ($i:expr, $e:ident >> $($rest:tt)*) => {
@@ -887,7 +887,7 @@
         match $submac!($i, $($args)*) {
             ::std::result::Result::Err(err) =>
                 ::std::result::Result::Err(err),
-            ::std::result::Result::Ok((i, _)) =>
+            ::std::result::Result::Ok((_, i)) =>
                 do_parse!(i, $($rest)*),
         }
     };
@@ -900,7 +900,7 @@
         match $submac!($i, $($args)*) {
             ::std::result::Result::Err(err) =>
                 ::std::result::Result::Err(err),
-            ::std::result::Result::Ok((i, o)) => {
+            ::std::result::Result::Ok((o, i)) => {
                 let $field = o;
                 do_parse!(i, $($rest)*)
             },
@@ -915,7 +915,7 @@
         match $submac!($i, $($args)*) {
             ::std::result::Result::Err(err) =>
                 ::std::result::Result::Err(err),
-            ::std::result::Result::Ok((i, o)) => {
+            ::std::result::Result::Ok((o, i)) => {
                 let mut $field = o;
                 do_parse!(i, $($rest)*)
             },
@@ -985,7 +985,7 @@
 #[doc(hidden)]
 pub fn input_end(input: Cursor) -> PResult<'static, ()> {
     if input.eof() {
-        Ok((Cursor::empty(), ()))
+        Ok(((), Cursor::empty()))
     } else {
         parse_error()
     }
@@ -1036,10 +1036,10 @@
 macro_rules! option {
     ($i:expr, $submac:ident!( $($args:tt)* )) => {
         match $submac!($i, $($args)*) {
-            ::std::result::Result::Ok((i, o)) =>
-                ::std::result::Result::Ok((i, Some(o))),
+            ::std::result::Result::Ok((o, i)) =>
+                ::std::result::Result::Ok((Some(o), i)),
             ::std::result::Result::Err(_) =>
-                ::std::result::Result::Ok(($i, None)),
+                ::std::result::Result::Ok((None, $i)),
         }
     };
 
@@ -1086,7 +1086,7 @@
 #[macro_export]
 macro_rules! epsilon {
     ($i:expr,) => {
-        ::std::result::Result::Ok(($i, ()))
+        ::std::result::Result::Ok(((), $i))
     };
 }
 
@@ -1102,10 +1102,10 @@
 macro_rules! tap {
     ($i:expr, $name:ident : $submac:ident!( $($args:tt)* ) => $e:expr) => {
         match $submac!($i, $($args)*) {
-            ::std::result::Result::Ok((i, o)) => {
+            ::std::result::Result::Ok((o, i)) => {
                 let $name = o;
                 $e;
-                ::std::result::Result::Ok((i, ()))
+                ::std::result::Result::Ok(((), i))
             }
             ::std::result::Result::Err(err) =>
                 ::std::result::Result::Err(err),
diff --git a/src/synom.rs b/src/synom.rs
index cd2b622..970ef1f 100644
--- a/src/synom.rs
+++ b/src/synom.rs
@@ -37,7 +37,7 @@
 
 impl Synom for TokenStream {
     fn parse(input: Cursor) -> PResult<Self> {
-        Ok((Cursor::empty(), input.token_stream()))
+        Ok((input.token_stream(), Cursor::empty()))
     }
 
     fn description() -> Option<&'static str> {
diff --git a/src/token.rs b/src/token.rs
index 6872922..430d57f 100644
--- a/src/token.rs
+++ b/src/token.rs
@@ -523,13 +523,13 @@
                 _ => return parse_error(),
             }
         }
-        Ok((tokens, new(T::from_spans(&spans))))
+        Ok((new(T::from_spans(&spans)), tokens))
     }
 
     pub fn keyword<'a, T>(keyword: &str, tokens: Cursor<'a>, new: fn(Span) -> T) -> PResult<'a, T> {
         if let Some((span, term, rest)) = tokens.term() {
             if term.as_str() == keyword {
-                return Ok((rest, new(span)));
+                return Ok((new(span), rest));
             }
         }
         parse_error()
@@ -555,9 +555,9 @@
 
         if let Some((inside, span, rest)) = tokens.group(delim) {
             match f(inside) {
-                Ok((remaining, ret)) => {
+                Ok((ret, remaining)) => {
                     if remaining.eof() {
-                        return Ok((rest, (new(span), ret)));
+                        return Ok(((new(span), ret), rest));
                     }
                 }
                 Err(err) => return Err(err),
diff --git a/src/tt.rs b/src/tt.rs
index a3bebe3..cc4e047 100644
--- a/src/tt.rs
+++ b/src/tt.rs
@@ -23,7 +23,7 @@
                 Delimiter::Bracket => MacroDelimiter::Bracket(Bracket(span)),
                 Delimiter::None => return parse_error(),
             };
-            Ok((rest, (delimiter, tts)))
+            Ok(((delimiter, tts), rest))
         }
         _ => parse_error(),
     }
@@ -38,7 +38,7 @@
                 kind: TokenNode::Group(Delimiter::Brace, tts),
             },
             rest,
-        )) => Ok((rest, (Brace(span), tts))),
+        )) => Ok(((Brace(span), tts), rest)),
         _ => parse_error(),
     }
 }
@@ -52,7 +52,7 @@
                 kind: TokenNode::Group(Delimiter::Parenthesis, tts),
             },
             rest,
-        )) => Ok((rest, (Paren(span), tts))),
+        )) => Ok(((Paren(span), tts), rest)),
         _ => parse_error(),
     }
 }