[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 } )
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2018-01-29 [Javascript] String Padding in Javascript using padStart and padEnd functions
2016-01-29 [Redux] Extracting Container Components (FilterLink)
2016-01-29 [Regular Expressions] Introduction