[Functional Programming 101] runWIth, evalWith, execWith
Recentlly, I am learning crocks.js ADT libaray. In the beginning, it is hard to understand when to use 'runWith', 'evalWith', 'execWith'. Until I went though the course a thrid times... I finally have some feelings for it.
State has 'get, put, modify' methods for use, and you can build them by yourself as well:
// getState :: () -> State s const getState = () => State(s => Pair(s, s)) //putState :: s -> State s () const putState = state => State(() => Pair(Unit(), state)); // modifyState :: (s -> s) -> State s () const modifyState = fn => State(s => Pair(Unit(), fn(s)));
As well can see, for those methods, they are all using 'Pair'.
Pair(a, s):
On the left part of Pair, is 'a': stand for variable; On the right part of Pair, 's' is the State.
Now rules for using 'runWith', 'evalWith', 'execWith':
1. If you want to get result as Pair(a, s), you should use 'runWith':
const bubble = { bubbles: 40 }; const add = x => y => x+ y; console.log( modify(mapProps({bubbles: add(1)})) .runWith(bubble) // Pair( (), { bubbles: 41 } ) )
2. If you only instreaded in the variable 'a', you should use 'evalWith':
const bubble = { bubbles: 40 }; const add = x => y => x+ y; console.log( modify(mapProps({bubbles: add(1)})) .evalWith(bubble) // () Unit )
3. If you instested in State, which is on the right part of Pair, you should use 'execWith':
const bubble = { bubbles: 40 }; const add = x => y => x+ y; console.log( modify(mapProps({bubbles: add(1)})) .execWith(bubble) // { bubbles: 41 } )
相关文章
- 《The C Programming Language》读书笔记总结 <一>.基础篇
- [Kotlin] Compare Functional Programming in Java and Kotlin
- [Functional Programming] foldMap for Monoids
- [Functional Programming] 2. Function modelling -- Validation
- [Functional Programming] Monad
- [Functional Programming Monad] Map And Evaluate State With A Stateful Monad
- [Functional Programming] Draw Items from One JavaScript Array to Another using a Pair ADT
- [Functional Programming] Function modelling -- 8. Compose Functors
- [Functional Programming] Function modelling -- 7. contramap & Endo execrises
- [Functional Programming] liftA2 and converge
- [Functional Programming] Functional JS - Pointfree Logic Functions
- [Functional Programming] Using JS, FP approach with Arrow or State Monad
- [Functional Programming] Working with two functors(Applicative Functors)-- Part2 --liftAN
- [Functional Programming] Async IO Functor
- [Functional Programming Moand] Update The State Of A State Monad (put)
- [Reactive Programming] Using an event stream of double clicks -- buffer()
- SAP Cloud Application Programming 里的@(path) 注解
- Go Programming Blueprints 读书笔记(谈到了nsq/mgo处理数据持久化,可是业务逻辑不够复杂)
- 禅与 JavaScript 编程艺术, Zen and The Art of JavaScript Programming
- 函数式编程的基石 —— Lambda Calculus(Functional Programming)
- 4.3 Reduction代码(Heterogeneous Parallel Programming class lab)