comprehension-js v0.1.2
comprehension-js
List comprehension from haskell to javascript.
An easy way to build and transform array using a concise and declarative description (thanks to Haskell).
To easily understand what list comprehensions are in Haskell check out this link.
Installation
From npm
npm i comprehension-jsimport { comprehensions } from 'comprehension-js';From CDN
<script src="https://unpkg.com/comprehension-js/dist/index.min.js"></script>
<script>
var comprehensions = Comprehensions.comprehensions;
</script>Examples of use:
Declaring an input set in the input description section
comprehensions('[x | x<- [1..100], x*2 >= 12, x<100, x*2<160]');will output => 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
Using the generated function to modifiy an input array
let factory = comprehensions('[x | x<- xs, x*2 >= 12, x<100, x*2<160]'); factory([1,2,3,4,5,6,7,8,9,10]);will output => 6, 7, 8, 9, 10
###Quick description of the input spec
The input spec (in short the string passed to the comprehensions function) is composed by three main parts: output function, input set, filter functions.
Taking this spec as example: [x3 | x<- 1..10, x/2>=2, x5<160] we have that:
- Each specification has to be enclosed in square brackets
- The portion before the pipe -x*3- is the output function indeed the operation here described will be applied at each value of the array
- The portion after the pipe and before the first comma -x<- 1..10- is the input set, here we have some accepted forms:
- x<-first..last for example x<-1..10 represent an array composed by the first 10 int 1,2,3,4,5,6,7,8,9,10
- x<-first,second..last for example x<-1,3..10 represent an array where each outut value is evaluated considering the step offset between the first tho values 1,3,5,7,9
- x<-xs considering any kind of array (when this form is used the
comprehensionsfunction will be return a factory function especting an input array to which apply the tranformation according to the input spec). - The portion after the first array separated by commas -x/2>=2, x*5<16- represents the filter functions
So, if we call the comprehensions function passing the spec example as input we will receive as output 12, 15, 18, 21, 24, 27, 30.
##Development Fetch the dependencies by
npm installthen
Building
npm buildRunning test
npm testLicense
This project is licensed under the terms of MIT License. See the LICENSE file for more info.