fantasyland extensions for immutablejs
npm install immutable-ext
In addition to the Functor, Foldable, and Monad functions, we now have:
- Monoid
- Applicative (list only right now)
- Traversable
Plus stuff that builds off of reduce like foldMap. Please contribute/complain as you want/need things.
We can now traverse without messing with Array or Object:
const{ List, Map }=require('immutable-ext')constTask=require('data.task')constIO=require('fantasy-io')// Given Http.get :: String -> Task Error BlogList.of('/blog/1','/blog/2').traverse(Task.of,Http.get).fork(console.error,console.log)// List(Blog, Blog)Map({home: "<div>homepage</div>",faq: "<p>ask me anything</p>"}).traverse(IO.of,(v,k)=>newIO(v=>$('body').append(v)))// IO(Map({home: "[dom]", faq: "[dom]"})We can fold stuff down
const{Disjunction, Additive}=require('fantasy-monoids')List.of([1,2,3],[4,5,6]).fold([])//[1,2,3,4,5,6]Map({a: "hidy",b: "hidy",c: "ho"}).fold("")// "hidyhidyho"List.of(Map({a: Additive(1),b: Disjunction(true),c: "son",d: [1],e: 'wut'}),Map({a: Additive(2),b: Disjunction(false),c: "ofa",d: [2]}),Map({a: Additive(3),b: Disjunction(false),c: "gun",d: [3]})).fold(Map.empty),// Map({a: Additive(6), b: Disjunction(true), c: "sonofagun", d: [1,2,3], e: 'wut'})))foldMap some things
List.of(1,2,3,4).foldMap(Additive,Additive.empty)// Additive(10)Map({a: true,b: false}).foldMap(Disjunction,Disjunction.empty)// Disjunction(true)We can ap to get us some list comprehensions
List.of(x=>y=>x+y).ap(List.of('a','b','c')).ap(List.of('+','-'))// List('a+', 'a-', 'b+', 'b-', 'c+', 'c-')