diff --git a/src/lib.rs b/src/lib.rs
index 266450dc0bc752c7e720448cc5534af689908723..57aeb2e3e3295f3dedaecc06dac0be24b6ac250e 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -115,7 +115,7 @@ pub enum IpTo {
 }
 
 /// `$($Ident: Ident ($Ty) -> $Ty )*`
-pub type Ips = HashMap<Ident, (Ident, Ty, Ty)>;
+pub type Ips = HashMap<Ident, (Option<Ty>, Ty)>;
 
 /// `$($Ident: $Ty = $Expr < $Path,)*`
 pub type Ops = HashMap<Ident, (Ty, Expr, Path)>;
diff --git a/src/parse.rs b/src/parse.rs
index deac90026991af253df8eec921cb8daf11535f03..5ca477f3d36ee433a2c95cde5968dcf1793f1343 100644
--- a/src/parse.rs
+++ b/src/parse.rs
@@ -496,7 +496,7 @@ fn ips(tts: &mut Peekable<Iter<TokenTree>>) -> Result<Ips> {
                 bail!("expected Colon, found {:?}", tt);
             }
 
-            let mut ty_arg = syn::parse_type(&"()")?;
+            let mut ty_arg = None;
             let mut ty_ret = syn::parse_type(&"()")?;
             let _ = ::parse::delimited(&mut tts, DelimToken::Brace, |tts| {
                 fields(&tts, |key, mut tts| {
@@ -508,9 +508,9 @@ fn ips(tts: &mut Peekable<Iter<TokenTree>>) -> Result<Ips> {
                             } else {
                                 bail!("expected `fn` Ident, found {:?}", tt);
                             }
-                            ty_arg = ::parse::delimited(&mut tts, DelimToken::Paren, |tts| {
+                            ty_arg = Some(::parse::delimited(&mut tts, DelimToken::Paren, |tts| {
                                 Ok(syn::parse_type(&format!("{}", quote!(#(#tts)*)))?)
-                            })?;
+                            })?);
 
                             let tt = tts.peek().cloned();
                             let ty_ret: Result<Ty> = match tt {
@@ -538,50 +538,8 @@ fn ips(tts: &mut Peekable<Iter<TokenTree>>) -> Result<Ips> {
                 Some(&TokenTree::Token(Token::Comma)) => {}
                 _ => bail!("expected Comma, found {:?}", tt),
             }
-            //            	Ok(()))?;
-            //
-            //
-            //            let tt = tts.next();
-            //            if let Some(&TokenTree::Token(Token::Colon)) = tt {
-            //            } else {
-            //                bail!("expected Colon, found {:?}", tt);
-            //            }
-            //
-            //            let tt = tts.next();
-            //            let meth =
-            //                if let Some(&TokenTree::Token(Token::Ident(ref id))) = tt {
-            //                    id
-            //                } else {
-            //                    bail!("expected Ident, found {:?}", tt);
-            //                };
-            //
-            //            //let ty_param: Result<Ty> =
-            //            let ty_param =
-            //                ::parse::delimited(&mut tts, DelimToken::Paren, |tts| {
-            //                    Ok(syn::parse_type(&format!("{}", quote!(#(#tts)*)))?)
-            //                })?;
-            //
-            //
-            //            let tt = tts.next();
-            //            //            let ty_return: Result<Ty> = Ok(syn::parse_type(&"()")?);
-            //            let ty_return: Result<Ty> = match tt {
-            //                Some(&TokenTree::Token(Token::Comma)) => {
-            //                    tts.next();
-            //                    Ok(syn::parse_type(&"()")?)
-            //                }
-            //                Some(&TokenTree::Token(Token::RArrow)) => {
-            //                    ::parse::ty(&TokenTree::Token(Token::Comma), &mut tts)
-            //                }
-            //                _ => bail!("expected `-> Type,' or `,` found {:?}", tt),
-            //            };
-            //
-            //            //let tt = tts.next();
-            //            //            if let Some(&TokenTree::Token(Token::Comma)) = tt {
-            //            //            } else {
-            //            //                bail!("expected Comma, found {:?}", tt);
-            //            //            };
-            //
-            //            ips.insert(ident.clone(), (meth.clone(), ty_param, ty_return?));
+
+            ips.insert(ident.clone(), (ty_arg, ty_ret));
         }
         Ok(ips)