import { Accum } from "../_interfaces" import { curry3 } from "../_util" import { Observable } from "../Observable" import { Property } from "../Property" import { last } from "./last" import { scan } from "./scan" export const fold: CurriedFold = curry3(_fold) export interface CurriedFold { ( seed: StateType, acc: Accum, observable: Observable, ): Property (seed: StateType): ( acc: Accum, observable: Observable, ) => Property (seed: StateType, acc: Accum): ( observable: Observable, ) => Property (seed: StateType): ( acc: Accum, ) => (observable: Observable) => Property } function _fold(seed: S, acc: Accum, observable: Observable): Property { return last(scan(seed, acc, observable)) }