// Generic Monad structure
class Monad {
constructor(value) {
this.value = value;
}
// Bind: chains computations that return a Monad
bind(fn) {
return fn(this.value);
}
// Unit: wraps a value in the Monad
static of(value) {
return new Monad(value);
}
// For debugging
get() {
return this.value;
}
}
// Example: Maybe Monad
class Maybe extends Monad {
bind(fn) {
if (this.value == null) {
return new Maybe(null);
}
return fn(this.value);
}
static of(value) {
return new Maybe(value);
}
getOrElse(defaultValue) {
return this.value == null ? defaultValue : this.value;
}
}
// Demo: chaining computations with Monad
const double = x => Monad.of(x * 2);
const increment = x => Monad.of(x + 1);
const result = Monad.of(5)
.bind(double) // 10
.bind(increment); // 11
console.log(result.get()); // Output: 11
// Demo: chaining with Maybe Monad
const safeDivide = x => x === 0 ? Maybe.of(null) : Maybe.of(10 / x);
const maybeResult = Maybe.of(2)
.bind(safeDivide) // 10 / 2 = 5
.bind(x => Maybe.of(x + 3)); // 8
console.log(maybeResult.getOrElse("fail")); // Output: 8
const maybeFail = Maybe.of(0)
.bind(safeDivide) // null
.bind(x => Maybe.of(x + 3));
console.log(maybeFail.getOrElse("fail")); // Output: "fail"
分类: 文字作品
我们的方字多么美好啊
maybe functor
class Maybe {
constructor(value) {
this.value = value;
}
// Functor map: applies a function if value is not null/undefined
map(fn) {
if (this.value === null) {
return new Maybe(null);
}
return new Maybe(fn(this.value));
}
// getOrElse: safely extract value with a fallback
getOrElse(defaultValue) {
return this.value === null ? defaultValue : this.value;
}
// static helpers for convenience
static of(value) {
return new Maybe(value);
}
static nothing() {
return new Maybe(null);
}
}
// Example usage:
const maybeNumber = Maybe.of(5)
.map(n => n * 2)
.map(n => n + 1);
console.log(maybeNumber.getOrElse(0)); // Output: 11
const maybeNull = Maybe.of(null)
.map(n => n * 2);
console.log(maybeNull.getOrElse(0)); // Output: 0
菜鸟面试官的一点思考
这几个月开始面试,里面就涉及到了怎么面试的问题,有人说你面试能力不行,那我的面试方法真的有问题吗?
继续阅读“菜鸟面试官的一点思考”记一次花xxx块钱通过黄牛坐高铁
通过这次坐高铁,我觉得自己很机械,不会变通,黄牛出售的是一种思路,一种很普通简单的思路,感觉被收了智商税,书读了那么多年,反而像是被教育害了。社会让我们做一个守规矩的人,回头看,要懂得逾越规矩时,人已经老了。
人要有创新思维,打破常规。创业赚钱也是这个道理,工作中想要轻松的工作也是这个道理。
继续阅读“记一次花xxx块钱通过黄牛坐高铁”我的高考
最近看了同事的一篇谈及自己高考的文章,想到了自己的高考。我是 2012 年参加高考的,过去了 13 年,但是你让我回忆高考那几天发生了什么,我却记忆犹新,恍如昨日。
高考一经考完,班里的同学都在组织聚会,觉得过了一个很大的人生节点,很有必要庆祝或者放纵一下。而我想的有点奇怪,觉得应该激流勇退,并没有参加那个晚上的 ktv ,至于那场聚会有多少荒诞不经或者洒泪留恋的场景就不得而知了。
继续阅读“我的高考”一个前端组长要关注哪些东西?
团队
- 人才梯队培养:目前 ecad 团队缺乏中高级前端;
- 团队文化建设:软件追求高效,稳定;代码追求易读易维护易扩展;个人追求成长进步;
- 做好知识沉淀和积累:api 的稳定,团队分享,文档,code review;
- 团队目标制定:okr 的制定,以及协助团队实现。
产品
- 版本管理:实现既定目标的版本发布,需求的迭代管理;
- 产品定位:以用户视角考虑问题,明白产品要解决的核心问题,技术为产品服务;
- 构建产品的方法论:完成比完美重要,注重提炼核心需求和产品基础能力;
- 关注市场反馈:关注市场变化,市场数据,用户的反馈。
个人
- 沟通表达能力提升:清晰传达需求,向上管理预期,向下反馈问题,学会聆听;
- 领导力的建立:阅读一些管理类的书籍,更好的组织团队,带领团队;
- 思维转变:个人产出,变成团队产出;
- 专业知识学习:持续学习编程的基础知识。
自证陷阱
电影《让子弹飞》有一场很滑稽的戏,张默被人诬陷说吃了 2 碗的凉粉,却只给了 1 碗的钱,不公平。结果他剖腹自证,从胃里取出了一碗凉粉,他自证成功了,但是也失去了生命。自证的代价非常昂贵,得不偿失。
这场戏看起来很荒唐很戏剧,现实生活中似乎不会存在这样的事情。
不知道大家有没有遇到类似的场景,别人扣一个屎盆子在你头上,总是想着去辩解自己没有,而没有想过为什么不让对方提供证据证明你有。
人的思维总是很奇怪的,别人诬陷你,总想着去自证,结果越描越黑,进入了别人的节奏里。
能够打败魔法的,绝对也是魔法,而不是理性。掉入了别人的陷阱里,想爬出来也是非常困难的,最好的结果是提前不要掉入别人的陷阱。
商业逻辑里也是类似的,打败微信的不是更好的“微信”。
当别人想要和你论证 a 的时候,我们千万不要论证 a 的不合理性,转而论证 b 的合理性,反而能开拓一片新的天地。
婚姻中的静电效应
深圳的秋冬季,我经常被静电电到。电到杯弓蛇影的地步,一度不敢触摸金属物体。
后来,我学会了在用手触摸金属材质前,先把手机碰上去,这个时候就能看到一点火花和听到劈劈啪啪的声音,屡试不爽。然后再去开门,这样基本上不会被电到。
静电的杀伤力不强,何以对我产生如此强烈的震慑呢?
继续阅读“婚姻中的静电效应”我的 2024
2024 是艰难的一年,也可以说是糟糕的一年。总结出一个关键词,不是吵架就是离婚。
继续阅读“我的 2024”我的 2023
快忘记要总结一下我的 2023 了,因为宝子一直在身边,没有大块的时间,直到现在宝子回了老家。
用老婆的话来说,2023 是我的丰收年,怎么个丰收法呢,也许是这几个方面吧。
我结婚了,领了证,办了婚礼,同时我的娃儿也出生了,前几年我一直被困扰的烂尾楼,也最终没有烂尾的事实,虽然还存在着安全隐患。以前有一个很神奇的感受是,究竟怎么样的人会结婚生娃呢,现在想来,我这样的人也结婚生娃了。
继续阅读“我的 2023”