• Stars
    star
    490
  • Rank 89,811 (Top 2 %)
  • Language
    JavaScript
  • License
    ISC License
  • Created over 8 years ago
  • Updated almost 6 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

fantasyland extensions for immutablejs

immutable-ext

fantasyland extensions for immutablejs

Install

npm install immutable-ext

What is this?

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.

Examples

We can now traverse without messing with Array or Object:

  const { List, Map } = require('immutable-ext')
  const Task = require('data.task')
  const IO = require('fantasy-io')


  // Given Http.get :: String -> Task Error Blog

  List.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) => new IO(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-')

More Repositories

1

pointfree-fantasy

Point free wrappers for fantasy land
JavaScript
450
star
2

Practically-Functional

practically functional programming workshop
JavaScript
222
star
3

lenses

Composable kmett style lenses
JavaScript
213
star
4

freeky

Free monad Collection
JavaScript
175
star
5

classroom-coding

Video series code
JavaScript
130
star
6

patterns_talk

code from fluent talk
JavaScript
97
star
7

Functional-Javascripts

algebraic data types, pattern matching, applicatives, monads, prelude, oliver steele's lib modified
JavaScript
86
star
8

RecursionTalk

Talk for Forward Conference Feb 2015
JavaScript
83
star
9

Oh-Composable-World

React Rally 2016
JavaScript
63
star
10

excursion

recursion-schemes in JS
JavaScript
57
star
11

spotify-fp-example

Egghead.io lesson
JavaScript
41
star
12

hardcorejs

Demos for the class
JavaScript
20
star
13

monio-demo-app

JavaScript
5
star
14

xamin

Examines rails apps and generates xmi for uml
Ruby
4
star
15

Code-Review

Creates pdf of modified files for code review.
3
star
16

Dizzywyg

A mini-wysiwyg that will apply css rules and semantic markup
JavaScript
3
star
17

CrudLinks

Dynamically creates links for crud actions.
Ruby
3
star
18

scottydemo

Port of scotty over express
JavaScript
2
star
19

Set-Attribute-Order

Declare an order for setters
Ruby
2
star
20

Nav-y

Yaml based navigation
Ruby
2
star
21

beautiful-folds

https://www.youtube.com/watch?v=6a5Ti0r8Q2s
1
star
22

Interfaces

Declare an interface and get yelled at for not implementing it.
Ruby
1
star
23

Public-Accessor

An attempt at public/private methods for rails attributes
Ruby
1
star
24

cssthingy

JavaScript
1
star
25

cypher

Scala
1
star
26

FRP-talk

1
star