scalike
TypeScript icon, indicating that this package has built-in type declarations

0.0.7 • Public • Published

Scala like utility for TypeScript

Travis CI

  • Optional (Option is reserved word..)
  • Try
  • Either
  • Future

You can use map, flatMap like a Scala. Almost implements methods of Scala. and, of counse Immutable.

If you wanna List, Map, ... You can use Immutable.js

Getting started

Install scalike using npm.

npm install scalike

Example in TypeScript.

$ vi example.ts

write.

///<reference path='./node_modules/scalike/dist/scalike.d.ts'/>
import {Optional} from 'scalike';

var a = Optional(1).map(x => x + 1); // Some(2)
var b = Optional(null).getOrElse(0); // 0

console.log(a, b);

run.

$ tsc example.ts --module commonjs // generate js file.
$ node example.js // run it.

I use IntellijIDEA, it's supported TypeScript.

Node.js or CoffeeScript

Then require it into any module.

node

$ node
> var scalike = require('scalike');
...

coffee

$ coffee
> scalike = require 'scalike'

Browser

add a script tag to your page.

<script src="scalike.min.js"></script>
<script>
  ...
</script>

Or use an AMD loader (such as RequireJS):

require(['./scalike.min.js'], function (scalike) {
  ...
});

Example

Optional

Some<A> or None.

Optional(1).map(x => x + 1) // Some(2)
Optional(null).map(x => x + 1) // None
Optional(undefined).map(x => x + 1) // None
Optional(1).flatMap(x => Some(x + 1)).fold(0, x => x + 1) // 3

Try

Excpetion safe collection.

Success<A> or Failure.

function something() { return 1 }
Try(something) // Success(1)

function throwError() { throw new Error }
Try(throwError) // Failure(Error)

Try(() => 1).map(x => x + 1) // Success(2)

Either

Represent A or B.

Left<A> or Right<B>.

function validate(x: number): Either<string, number> {
  return x !== 1 ? Left('this is not 1') : Right(x)
}
validate(1).right().getOrElse(0) // 1
validate(2).left().getOrElse("err") // "this is not 1"

Future

Future is like a Promise. Exception safety.

function something() { return 1 }
Future(something).map(x => x + 1) // Future(2)

Future.successful(1).value // Optional(Success(1))

const fu = Future(something)
Future.sequence([fu, fu, fu]) // Future([1, 1, 1])

Future can received Promise.

function getGithub(): Promise<Response> {
  return fetch('https://github.com/');
}

Future(getGithub())
  .map(response => response.status)
  .foreach(status => console.log(status));

Future is implemented ES6 Promise.

You'll also need a Promise polyfill for older browsers.

for browser.

$ bower install es6-promise

and

<script src="/path/es6-promise.js"></script>

for node.

$ npm install es6-promise

and

require('es6-promise').polyfill();

for-comprehension...?

TypeScript has not for comprehension. Of corse.

so, I write like this.

Optional(1).apply1(Opption(2), (a, b) => a + b) // Optional(3)

and

Optional(1)
  .chain(Optional(2))
  .chain(Optional(3))
  .chain(Optional(4))
  .run((a, b, c, d) => a + b + c + d) // Optional(10)

Optional(1)
  .chain(Optional(2))
  .chain(Optional(null)) // if None?, be all None
  .chain(Optional(4))
  .run((a, b, c, d) => a + b + c + d) // None
const fu = x => Future(() => x)

fu(1)
  .chain(fu(2))
  .chain(fu(3))
  .run((a, b, c) => a + b + c)
  .foreach(x => console.log(x)) // 6

like a scalaz ApplicativeBuilder.

Documentation

soon

Feature

  • Option
  • Try
  • Either
  • Future
  • combine Immutable.js (Seq, Map, Stream, ...)

Setup for scalike development

$ npm install
$ npm install tsd -g
$ tsd install
$ npm test // run unit test in mocha

License

MIT

Package Sidebar

Install

npm i scalike

Weekly Downloads

13

Version

0.0.7

License

MIT

Last publish

Collaborators

  • ryoppy