mode
This commit is contained in:
parent
9703a9fc33
commit
223c6205ac
@ -2,7 +2,7 @@
|
||||
|
||||
[Introduction](./ch00/s00-introduction.md)
|
||||
|
||||
- [Background]()
|
||||
- [Mode Parsing](./ch01/s00-mode-parsing.md)
|
||||
- [Implementation]()
|
||||
- [Usage]()
|
||||
- [Current Implementation Concerns](./ch04/s00-concerns.md)
|
||||
|
53
src/ch01/s00-mode-parsing.md
Normal file
53
src/ch01/s00-mode-parsing.md
Normal file
@ -0,0 +1,53 @@
|
||||
# `Mode` Parsing
|
||||
|
||||
```rust
|
||||
type ParseSuccess<M, A, I> = <M as Mode>::ParseSuccess<A, I>;
|
||||
|
||||
type ModeResult<M, A, E, I> = Result<ParseSuccess<M, A, I>, E>;
|
||||
|
||||
trait Mode {
|
||||
type ParseSuccess<A, I>;
|
||||
|
||||
type ExtensionResult<A, E>;
|
||||
|
||||
type ExtensionSource<A>;
|
||||
|
||||
fn bind<A0, A1, E, I>(
|
||||
s: Self::ParseSuccess<A0, I>,
|
||||
f: impl FnOnce(A0) -> Result<A1, E>,
|
||||
) -> ModeResult<Self, A1, E, I>;
|
||||
|
||||
fn map<A0, A1, I>(
|
||||
s: Self::ParseSuccess<A0, I>,
|
||||
f: impl FnOnce(A0) -> A1,
|
||||
) -> Self::ParseSuccess<A1, I>;
|
||||
|
||||
fn seal<A, I>(s: Self::ParseSuccess<A, I>) -> A;
|
||||
|
||||
fn xmap_err<A, E0, E1>(
|
||||
result: Self::ExtensionResult<A, E0>,
|
||||
f: impl FnOnce(E0) -> E1,
|
||||
) -> Self::ExtensionResult<A, E1>;
|
||||
|
||||
fn xbind<A0, A1, E>(
|
||||
result: Self::ExtensionResult<A0, E>,
|
||||
f: impl FnOnce(A0) -> Result<A1, E>,
|
||||
) -> Self::ExtensionResult<A1, E>;
|
||||
|
||||
fn xseal<A, E>(result: Self::ExtensionResult<A, E>) -> Result<A, E>;
|
||||
|
||||
fn smap<A0, A1>(
|
||||
source: Self::ExtensionSource<A0>,
|
||||
f: impl FnOnce(A0) -> A1,
|
||||
) -> Self::ExtensionSource<A1>;
|
||||
|
||||
fn prepare<A>(a: A) -> Self::ExtensionSource<A>;
|
||||
|
||||
fn xsbind<AB, A, B, E>(
|
||||
ab: Self::ExtensionSource<AB>,
|
||||
t2ab: impl FnOnce(AB) -> (A, B),
|
||||
ce: impl FnOnce(Self::ExtensionSource<B>) -> Self::ExtensionResult<B, E>,
|
||||
ab2t: impl FnOnce(A, B) -> Result<AB, E>,
|
||||
) -> Self::ExtensionResult<AB, E>;
|
||||
}
|
||||
```
|
Loading…
Reference in New Issue
Block a user