1.0.3 • Published 9 years ago
mcz v1.0.3
mcz
A simple pattern matching library for JavaScript/TypeScript.
Install
$ npm install --save mczUsage
in TypeScript
import {match} from "mcz";
var result = match<number, string>(2, when => {
  when(1, () => 'One');
  when(2, () => 'Two');
  when(3, () => 'Three');
  when.else(() => 'Others');
});
assert(result === 'Two');in JavaScript
var match = require("mcz").match;
var result = match(2, function (when) {
  when(1, function () {
    return 'One';
  });
  when(2, function () {
    return 'Two';
  });
  when(3, function () {
    return 'Three';
  });
});
assert(result === 'Two');API
match<T, U>(matcher: (x: T) => void): (x: T) => U
Create a pattern-matching function.
var f = match<number, string>(when => {
  when(1, () => 'Shiori');
  when(2, () => 'Kanako');
  when(3, () => 'Momoka');
  when(4, () => 'Ayaka');
  when(5, () => 'Reni');
});
var arr = [1, 2, 3, 4, 5].forEach(f);
console.log(arr);
// ['Shiori', 'Kanako', 'Momoka', 'Ayaka', 'Reni']match<T, U>(value: T, matcher: (x: T) => void): U
Execute pattern-matching, then returns result.
var result = match<string, string>('Yellow', when => {
  when('Red',    () => 'Kanako');
  when('Yellow', () => 'Shiori');
  when('Pink',   () => 'Ayaka');
  when('Green',  () => 'Momoka');
  when('Purple', () => 'Reni');
});
assert(result === 'Shiori');when(that: T, block: (x: T) => U): void
Add a pattern: execute the block when the value equals that strictly.
var result = match<any, string>('123', when => {
  when(123,   () => '123 as a number');
  when('123', () => '123 as a string');
});
assert(result === '123 as a string');when(that: (x: T) => boolean, block: (x: T) => U): void
Add a pattern: execute the block when the function that returns true.
var result = match<any, string>(new Date(), when => {
  when(x => x instanceof String, () => 'value is String');
  when(x => x instanceof Number, () => 'value is Number');
  when(x => x instanceof Date, () => 'value is Date');
});
assert(result === 'value is Date');when.else(block: (x: T) => U): void
Add a pattern: execute the block when the value does not match any other values.
var result = match<number, string>(9, when => {
  when(x => x < 0, () => 'Less than 0');
  when(x => x < 2, () => 'Less than 2');
  when(x => x < 4, () => 'Less than 4');
  when(x => x < 6, () => 'Less than 6');
  when.else(() => 'Equals 6, or greater than 6');
});
assert(result === 'Equals 6, or greater than 6');How to build or test
- Clone this repository.
- Run npm installto install dependencies.
- Run npm run buildornpm test.
License
MIT © 2016 shogogg