///
class User {
private age: number;
constructor(age?: number) {
this.age = age ? age : 0;
}
public getAge(): TsMonad.Either {
if (this.age > 0) {
return TsMonad.Either.right(this.age);
} else {
return TsMonad.Either.left('Information withheld');
}
}
}
module Station {
export class BusPass {
public isValidForRoute(route: string): boolean {
return true;
}
}
export function getBusPass(age: number): TsMonad.Either {
if (age > 18) {
return TsMonad.Either.right(new BusPass());
} else {
return TsMonad.Either.left('Too young for a bus pass');
}
}
}
var user = new User(42)
var canRideForFree = user.getAge()
.bind(age => Station.getBusPass(age))
.caseOf({
right: busPass => busPass.isValidForRoute('Weston'),
left: errorMessage => { console.log(errorMessage); return false; }
});