dak
v0.1.3
Published
Static type checker using Hindley–Milner type signatures
Downloads
6
Maintainers
Readme
Install
$ npm install --global dak
Usage
$ dak --help
Usage
$ dak [options] file.js [file.js] [dir]
Options
--throw Throws an error
Examples
hello.js
file:
// @dak
// @type greet :: String -> String
function greet(person) {
return "Hello, " + person;
}
var user = true;
greet(user);
// @type times10 :: Number -> Number
function times10(x) {
return x * 10;
}
times10('Hello, world!');
// @type reducer :: {count: Number} -> {type: String} -> {count: Number}
function reducer(state, action) {
switch (action.type) {
case 'INCREMENT':
return {count: state.count + 1};
case 'DECREMENT':
return {count: state.count - 1};
default:
return state;
}
}
reducer({count: 0}, {type: 1});
Console output:
$ dak hello.js
-- TYPE MISMATCH -----------------------------------------------------------
2| // @type greet :: String -> String
3| function greet(person) {
> 9| greet(user);
The type annotation for greet says it is a:
String
But the argument pass to the function call (shown above) is a:
Boolean
-- TYPE MISMATCH -----------------------------------------------------------
11| // @type times10 :: Number -> Number
12| function times10(x) {
> 16| times10('Hello, world!');
The type annotation for times10 says it is a:
Number
But the argument pass to the function call (shown above) is a:
String
-- TYPE MISMATCH -----------------------------------------------------------
18| // @type reducer :: {count: Number} -> {type: String} -> {count: Number}
19| function reducer(state, action) {
> 30| reducer({count: 0}, {type: 1});
The type annotation for reducer says it is a:
{type: String}
But the argument pass to the function call (shown above) is a:
Number for the key "type"
Found 3 errors in hello.js