Skip to content

Instantly share code, notes, and snippets.

@utkarshkukreti
Created March 13, 2014 19:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save utkarshkukreti/9534798 to your computer and use it in GitHub Desktop.
Save utkarshkukreti/9534798 to your computer and use it in GitHub Desktop.
enum Result<S, R, F> {
Success(R, ~[S]),
Failure(F)
}
struct Parser<'a, S, R, F> { parse : 'a |&[S]| -> Result<S,R,F> }
trait Composable {
fn Or(Self, Self) -> Self;
}
impl<'a, S, R, F> Composable for Parser<'a, S, R, F> {
fn Or
( p1 : Parser<'a, S, R, F>
, p2 : Parser<'a, S, R, F>
) -> Parser<'a, S, R, F> {
Parser
{ parse: |stream : &[S]| -> Result<S,R,F>
{ let result = (p1.parse)(stream)
; match result
{ Failure(_) => (p2.parse)(stream)
, _ => result
}
}
}
}
}
fn main() {
// let p = Parser { parse: |stream : &[int]| -> ~[Result<]};
println!("test");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment