bs-generators
Source: https://github.com/mscharley/bs-generators
Author: Matthew Scharley
Contributors: See contributors on GitHub
Bugs/Support: Github Issues
Copyright: 2018
License: MIT license
Status: Active
Synopsis
This package provides bindings to use and create JavaScripts' Generator objects, aka function*() {}
.
Using this library you can consume JavaScript libraries that use function*
and you can create objects that operate like that JS syntax to send into JavaScript land as well.
A word of warning. This library should only really be considered for interoperation with existing JavaScript code that uses Generators. I do not recommend using these types on their own inside ReasonML/Ocaml codebases.
Installation
Depending on your package manager of choice,
npm install bs-generators
or
yarn add bs-generators
Usage
The best API documentation so far is the interface file.
Using a function* defined in JavaScript and provided to your Reason code
open JsGenerator; /* Create a generator - pretend this comes from the outside */let jsGen: JsGenerator.fnU(int) = [%raw "function *() { yield 1; yield 2; yield 3 }"];let gen = jsGen(); /* Iterate over the generator and stop when doneGet returns true */Js.log("Running the JavaScript generator:");let i = ref(gen->next());while (! (i^)->doneGet) { Js.log((i^)->valueGet); i := gen->next();}
Creating a Generator to pass into JavaScript code
let reGen: JsGenerator.fn(int) = _ => JsGenerator.fromNext({ /* Create a mutable counter */ let i = ref(0); () => { if (i^ < 3) { i := i^ + 1; /* You can also return Some(None) to send an undefined value to JS without closing the Generator */ Some(Some(i^)); } else { /* Close the Generator */ None; } }}); Js.log("Running the Reason generator:");[%%raw "for (var x of reGen()) { console.log(x); }"];