Add exit constructor
This commit is contained in:
parent
e83fcd0b4d
commit
cafc857e56
@ -16,21 +16,26 @@ import {
|
|||||||
origin,
|
origin,
|
||||||
} from './canvas'
|
} from './canvas'
|
||||||
|
|
||||||
interface PainterExit extends Tag<'PainterExit'> {}
|
interface PainterExit<E> extends Tag<'PainterExit'> {
|
||||||
|
value: Either<E, Error>
|
||||||
|
}
|
||||||
|
|
||||||
interface PainterTask<T extends object = {}> extends Tag<'PainterTask'> {
|
interface PainterTask<E, T extends object = {}> extends Tag<'PainterTask'> {
|
||||||
task: {
|
task: {
|
||||||
origin: CanvasOrigin,
|
origin: CanvasOrigin,
|
||||||
end: CanvasEnd,
|
end: CanvasEnd,
|
||||||
effect: PainterEffect<T & Tag<'PainterState'>>,
|
effect: PainterEffect<E, T>,
|
||||||
state: Option<T & Tag<'PainterState'>>,
|
state: Option<T & Tag<'PainterState'>>,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type TaskConstructor<T extends object = {}> = (
|
type TaskConstructor = (
|
||||||
x: CursorPos,
|
x: CursorPos,
|
||||||
y: CursorPos,
|
y: CursorPos,
|
||||||
) => (f: PainterEffect, state?: T & Tag<'PainterState'>) => PainterTask<T>
|
) => <E = number, T extends object = {}>(
|
||||||
|
f: PainterEffect<E, T>,
|
||||||
|
state?: T & Tag<'PainterState'>,
|
||||||
|
) => PainterTask<E, T>
|
||||||
const task: TaskConstructor = (x, y) => (f, state?) => {
|
const task: TaskConstructor = (x, y) => (f, state?) => {
|
||||||
return {
|
return {
|
||||||
_tag: 'PainterTask',
|
_tag: 'PainterTask',
|
||||||
@ -43,14 +48,25 @@ const task: TaskConstructor = (x, y) => (f, state?) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ExitConstructor = <T>(x: Either<T, Error>) => PainterExit<T>
|
||||||
|
const exit: ExitConstructor = x => ({_tag: 'PainterExit', value: x})
|
||||||
|
|
||||||
type PainterEffect<
|
type PainterEffect<
|
||||||
|
E,
|
||||||
T extends object = {},
|
T extends object = {},
|
||||||
> = (task: PainterTask<T>) => Either<PainterTask<T>, PainterExit>
|
> = (task: PainterTask<T>) => Either<PainterTask<T>, PainterExit<E>>
|
||||||
|
|
||||||
type EffectState = <T extends object = {}>(x: T) => T & Tag<'PainterState'>
|
type EffectState = <T extends object = {}>(x: T) => T & Tag<'PainterState'>
|
||||||
const effectState: EffectState = x => ({_tag: 'PainterState', ...x})
|
const effectState: EffectState = x => ({_tag: 'PainterState', ...x})
|
||||||
|
|
||||||
export { type PainterEffect, task }
|
export {
|
||||||
|
type EffectState as PainterState,
|
||||||
|
effectState as tagState,
|
||||||
|
exit,
|
||||||
|
type PainterEffect,
|
||||||
|
type PainterTask,
|
||||||
|
task,
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// testing
|
// testing
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user