[JS Compose] 6. Semigroup examples
Let's we want to combine two account accidently have the same name.
const acct1 = { name: 'Nico', isPaid: true, points: 10, friends: ['Franklin'] } const acct2 = { name: 'Nico', isPaid: false, points: 2, friends: ['Gatsby'] }
So, here we can use Semi-group to combine them, because the semi-group have the knowledge how to combine for each type of object.
So we change two accounts as:
const acct1 = { name: First('Nico'), isPaid: All(true), points: Sum(10), friends: ['Franklin'] } const acct2 = { name: First('Nico'), isPaid: All(false), points: Sum(2), friends: ['Gatsby'] }
But here we still have one problem which Object doesn't have 'concat' method, so we need to use Immutable library to help:
Includes libarary:
const {Map} = Immutable;
const acct1 = Map({ name: First('Nico'), isPaid: All(true), points: Sum(10), friends: ['Franklin'] }) const acct2 = Map({ name: First('Nico'), isPaid: All(false), points: Sum(2), friends: ['Gatsby'] })
---------
const {Map} = Immutable; const Sum = x => ({ x, concat: ({x: y}) => Sum(x + y), inspect: () => `Sum(${x})` }) const All = x => ({ x, concat: ({x: y}) => All(x && y), inspect: () => `All(${x})` }) const First = x => ({ x, concat: _ => First(x), inspect: () => `First(${x})` }) const acct1 = Map({ name: First('Nico'), isPaid: All(true), points: Sum(10), friends: ['Franklin'] }) const acct2 = Map({ name: First('Nico'), isPaid: All(false), points: Sum(2), friends: ['Gatsby'] }) const res = acct1.concat(acct2) // Showing results console.log("Friend 1: ", res.toJS().friends[0]) //Friend 1: Franklin console.log("Friend 2: ", res.toJS().friends[1]) //Friend 2: Gatsby console.log("isPaid: ", res.toJS().isPaid.x) //isPaid: false console.log("Name: ", res.toJS().name.x) // Name: Nico console.log("Points: ", res.toJS().points.x) // Points: 12
【推荐】国内首个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工具
2014-12-15 [AngularJS] $http cache
2014-12-15 [AngularJS+ GSAP] Greensock TimelineLite Animation Sequences