Fork me on GitHub
external to_str : 'a => string = "js_anything_to_string"; external to_json_string : 'a => string = "js_json_stringify"; let debug x => print_endline (to_str x); let pprint x => print_endline (to_json_string x); let rec fib = fun | 1 | 2 => 1 | n => fib (n - 1) + fib (n - 2); /** Imperative style */ let sum n => { let v = ref 0; for i in 0 to n { v.contents = v.contents + i }; v.contents }; let tail_sum n => { let rec aux acc i => if (i <= n) { aux (acc + i) (i + 1) } else { acc }; aux 0 0 }; /** List map */ type list 'a = | Nil | Cons 'a (list 'a); let rec map f => fun | Nil => Nil | Cons x xs => Cons (f x) (map f xs); /** Test curry and uncurry calling convention */ let test_curry x y => x + y; let f = test_curry 32; let () = { let hello_ocaml = [|"h", "e", "l", "l", "o", "o", "c", "a", "m", "l"|]; hello_ocaml |> Array.to_list |> String.concat "," |> pprint };
Remove unused code
Eval
// GENERATED CODE BY BUCKLESCRIPT VERSION 0.3 , PLEASE EDIT WITH CARE 'use strict'; var Curry = require("./runtime/curry"); var $$Array = require("./stdlib/array"); var $$String = require("./stdlib/string"); function debug(x) { console.log("" + x); return /* () */0; } function pprint(x) { console.log(JSON.stringify(x)); return /* () */0; } function fib(n) { if (n === 2 || n === 1) { return 1; } else { return fib(n - 1 | 0) + fib(n - 2 | 0) | 0; } } function sum(n) { var v = 0; for(var i = 0; i <= n; ++i){ v = v + i | 0; } return v; } function tail_sum(n) { var _acc = 0; var _i = 0; while(true) { var i = _i; var acc = _acc; if (i <= n) { _i = i + 1 | 0; _acc = acc + i | 0; continue ; } else { return acc; } }; } function map(f, param) { if (param) { return /* Cons */[ Curry._1(f, param[0]), map(f, param[1]) ]; } else { return /* Nil */0; } } function test_curry(x, y) { return x + y | 0; } function f(param) { return 32 + param | 0; } var hello_ocaml = /* array */[ "h", "e", "l", "l", "o", "o", "c", "a", "m", "l" ]; var x = $$String.concat(",", $$Array.to_list(hello_ocaml)); console.log(JSON.stringify(x)); exports.debug = debug; exports.pprint = pprint; exports.fib = fib; exports.sum = sum; exports.tail_sum = tail_sum; exports.map = map; exports.test_curry = test_curry; exports.f = f; /* x Not a pure module */