Add Predicate type

This commit is contained in:
Aya Morisawa 2018-12-19 17:08:09 +09:00
parent 78ec06bda3
commit 8025b121af
No known key found for this signature in database
GPG key ID: 3E64865D70D579F2
2 changed files with 6 additions and 3 deletions

View file

@ -1,9 +1,10 @@
import { EndoRelation } from "./relation";
import { EndoRelation, Predicate } from './relation';
/**
* Count the number of elements that satisfy the predicate
*/
export function countIf<T>(f: (x: T) => boolean, xs: T[]): number {
export function countIf<T>(f: Predicate<T>, xs: T[]): number {
return xs.filter(f).length;
}
@ -97,7 +98,7 @@ export function lessThan(xs: number[], ys: number[]): boolean {
/**
* Returns the longest prefix of elements that satisfy the predicate
*/
export function takeWhile<T>(f: (x: T) => boolean, xs: T[]): T[] {
export function takeWhile<T>(f: Predicate<T>, xs: T[]): T[] {
const ys = [];
for (const x of xs) {
if (f(x)) {

View file

@ -1,3 +1,5 @@
export type Predicate<T> = (x: T) => boolean;
export type Relation<T, U> = (x: T, y: U) => boolean;
export type EndoRelation<T> = Relation<T, T>;