haskell: fix point

问题说明

fix 函数是基于 Y 子、定点理论等原理进行设计及使用的。

中文排版标准

之前做一个repo时,提到了中英文混排时的规范问题。

编程语言语法的思考

不同编程语言有不同的语法,语法主要影响可读性与编写效率。大部分语言的语法都比较相近,但一些语法设计上的细微差异会对编程过程产生不同的体验(特指程序员的心情,不是指思考方式、算法实现等理论知识)。

本文会提及如下语言C++、rust、go、python、ruby、haskell、lisp,但其中rust、go仅仅学过语法,没有实践过,所以观点非常片面!所以观点非常片面!所以观点非常片面

efi、systemd-boot与grub及双系统问题

最近在工作站上装nixos遇到了引导问题。大概为我配置了grub,但是开机却不能引导,行为是直接启动了windows,简直就像是uefi没有查找到linux的efi一样(事实也是的)。

这个问题其实之前也有遇到过,但当时因为不明不白的给跳过了,所以没有详细去理解,甚至没有发现这个问题。因此在此记录。

haskell中fmap, liftM, mapM, traverse历史问题记录

问题

fmapliftM看起来做了相同的事,只是类型约束不同,实现上也不一样,但结果是一样,且后者的实现,可以归约到前者。那为什么使用了两种不同的命名,分别实现?同样的还存在于mapMtraverse等地方。

资料

so: traverse archive

so: fmap archive

wiki: amp archive

说明

简单来说就是历史问题,以前的Monad等并没有受Functor约束,在2010的Haskell中已经改正了,但因为历史因素没有删除这些多余的命名。在使用中,推荐使用约束最少的那一个,比如说fmap和liftM,使用fmap。虽然实现上会有点区别,但最后的结果应该是一致的。