[Functional Programming] Pointy Functor Factory
A pointed functor is a functor with an
of
method
class IO { // The value we take for IO is always a function! static of (x) { return new IO(() => x) } constructor (fn) { this.$value = fn; } map (fn) { return new IO(compose(fn, this.$value)) } }
What's important here is the ability to drop any value in our type and start mapping away.
IO.of('tetris').map(concat(' master')); // IO('tetris master') Maybe.of(1336).map(add(1)); // Maybe(1337) Task.of([{ id: 2 }, { id: 3 }]).map(map(prop('id'))); // Task([2,3]) Either.of('The past, present and future walk into a bar...').map(concat('it was tense.')); // Right('The past, present and future walk into a bar...it was tense.')
The benifits using 'of' instead of 'new' is that we can map over the 'Task.of().map(fn)' right away.
Consider this:
const m = new Maybe(1336): m.map(add(1)) //VS Maybe.of(1336).map(add(1));
To avoid the new
keyword, there are several standard JavaScript tricks or libraries so let's use them and use of
like a responsible adult from here on out. I recommend using functor instances from folktale
, ramda
or fantasy-land
as they provide the correct of
method as well as nice constructors that don't rely on new
.
【推荐】国内首个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工具
2017-02-23 [HTML5] Focus management using CSS, HTML, and JavaScript
2017-02-23 [TypeScript] Increase TypeScript's type safety with noImplicitAny
2017-02-23 [React] displayName for stateless component
2016-02-23 [Protractor] Locators and Suites in Protractor