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.
From npm
npm i comprehension-js
import { comprehensions } from 'comprehension-js';
From CDN
<script src="https://unpkg.com/comprehension-js/dist/index.min.js"></script>
<script>
var comprehensions = Comprehensions.comprehensions;
</script>
- 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
comprehensions
function 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 install
then
npm build
npm test
This project is licensed under the terms of MIT License. See the LICENSE file for more info.