| // +build ignore | |
| package main | |
| import "fmt" | |
| // 1 START OMIT | |
| type F func(*State) F | |
| type State int | |
| func Begin(s *State) F { | |
| *s = 1 | |
| return Middle | |
| } | |
| func Middle(s *State) F { | |
| *s++ | |
| if *s >= 10 { | |
| return End | |
| } | |
| return Middle | |
| } | |
| // 1 END OMIT | |
| // 2 START OMIT | |
| func End(s *State) F { | |
| fmt.Println(*s) | |
| return nil | |
| } | |
| func main() { | |
| var f F = Begin | |
| var s State | |
| for f != nil { | |
| f = f(&s) | |
| } | |
| } | |
| // 2 END OMIT |