Skip to content

Instantly share code, notes, and snippets.

@gozes
Forked from ucarion/lib.rs
Last active August 29, 2015 14:23
Show Gist options
  • Save gozes/0ba7a4567ccf5033d799 to your computer and use it in GitHub Desktop.
Save gozes/0ba7a4567ccf5033d799 to your computer and use it in GitHub Desktop.
/Users/ulyssecarion/rust/sparsile/src/lib.rs:7:9: 13:10 error: cannot infer an appropriate lifetime for lifetime parameter `'a` due to conflicting requirements
/Users/ulyssecarion/rust/sparsile/src/lib.rs:7 State {
/Users/ulyssecarion/rust/sparsile/src/lib.rs:8 runState: |firstState| {
/Users/ulyssecarion/rust/sparsile/src/lib.rs:9 let (result, nextState) = (self.runState)(firstState);
/Users/ulyssecarion/rust/sparsile/src/lib.rs:10
/Users/ulyssecarion/rust/sparsile/src/lib.rs:11 (f(result).runState)(nextState)
/Users/ulyssecarion/rust/sparsile/src/lib.rs:12 }
...
/Users/ulyssecarion/rust/sparsile/src/lib.rs:6:65: 14:6 note: first, the lifetime cannot outlive the block at 6:64...
/Users/ulyssecarion/rust/sparsile/src/lib.rs:6 fn and_then<B>(&self, f: |A| -> State<S, B>) -> State<S, B> {
/Users/ulyssecarion/rust/sparsile/src/lib.rs:7 State {
/Users/ulyssecarion/rust/sparsile/src/lib.rs:8 runState: |firstState| {
/Users/ulyssecarion/rust/sparsile/src/lib.rs:9 let (result, nextState) = (self.runState)(firstState);
/Users/ulyssecarion/rust/sparsile/src/lib.rs:10
/Users/ulyssecarion/rust/sparsile/src/lib.rs:11 (f(result).runState)(nextState)
...
/Users/ulyssecarion/rust/sparsile/src/lib.rs:8:23: 12:14 note: ...so that closure does not outlive its stack frame
/Users/ulyssecarion/rust/sparsile/src/lib.rs:8 runState: |firstState| {
/Users/ulyssecarion/rust/sparsile/src/lib.rs:9 let (result, nextState) = (self.runState)(firstState);
/Users/ulyssecarion/rust/sparsile/src/lib.rs:10
/Users/ulyssecarion/rust/sparsile/src/lib.rs:11 (f(result).runState)(nextState)
/Users/ulyssecarion/rust/sparsile/src/lib.rs:12 }
/Users/ulyssecarion/rust/sparsile/src/lib.rs:6:65: 14:6 note: but, the lifetime must be valid for the anonymous lifetime #1 defined on the block at 6:64...
/Users/ulyssecarion/rust/sparsile/src/lib.rs:6 fn and_then<B>(&self, f: |A| -> State<S, B>) -> State<S, B> {
/Users/ulyssecarion/rust/sparsile/src/lib.rs:7 State {
/Users/ulyssecarion/rust/sparsile/src/lib.rs:8 runState: |firstState| {
/Users/ulyssecarion/rust/sparsile/src/lib.rs:9 let (result, nextState) = (self.runState)(firstState);
/Users/ulyssecarion/rust/sparsile/src/lib.rs:10
/Users/ulyssecarion/rust/sparsile/src/lib.rs:11 (f(result).runState)(nextState)
...
/Users/ulyssecarion/rust/sparsile/src/lib.rs:7:9: 13:10 note: ...so that expression is assignable (expected `State<'_, S, B>`, found `State<'_, S, B>`)
/Users/ulyssecarion/rust/sparsile/src/lib.rs:7 State {
/Users/ulyssecarion/rust/sparsile/src/lib.rs:8 runState: |firstState| {
/Users/ulyssecarion/rust/sparsile/src/lib.rs:9 let (result, nextState) = (self.runState)(firstState);
/Users/ulyssecarion/rust/sparsile/src/lib.rs:10
/Users/ulyssecarion/rust/sparsile/src/lib.rs:11 (f(result).runState)(nextState)
/Users/ulyssecarion/rust/sparsile/src/lib.rs:12 }
...
e
struct State<'a, S, A> {
runState: |S|: 'a -> (A, S)
}
impl<'a, S, A> State<'a, S, A> {
fn and_then<B>(&self, f: |A| -> State<S, B>) -> State<S, B> {
State {
runState: |firstState| {
let (result, nextState) = (self.runState)(firstState);
(f(result).runState)(nextState)
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment