haskell

在 Haskell 中实现 Generic zip 函数

其实嗫,这个问题已经有标准和其他的解决方案了。标准解决方案参见 Control.Applicative 中的 ZipList ,不过这东东用起来蛮麻烦的说;其他解决方案见 bff 库的 Data.Zippable 模块,嗯,我还没搞明白这玩意怎么用,不过总感觉杀鸡用牛刀了有点(Template Haskell ,以及其他依赖)。

所以,如果你只是跟我一样,看 Data.List 中的那一砣 zipn 不顺眼的话(其实也只是看着不顺哈,用着还是蛮顺的,反正实现不用我写),一个更简单的方案在此:

Haskell 中的可变长参数列表

说实话,我之前有就这个题目很有激情地写了很长很罗嗦的一篇草稿的,哦,确切来说是大半篇,直到被打断,激情不再,这篇草稿也就此躺了两个多月。好吧,其实是我还不是八卦那块料,就不卖弄了,直接总结。

要在 Haskell 中实现可变长参数列表,就是利用其 Typeclass 系统,对函数进行最终结果类型和中间函数类型之间的重载,然后利用 Haskell 的类型推导机制为我们自动调用合适的重载版本。嗯,就这么简单。下面是一个最简单的例子: