其实嗫,这个问题已经有标准和其他的解决方案了。标准解决方案参见 Control.Applicative
中的 ZipList
,不过这东东用起来蛮麻烦的说;其他解决方案见 bff 库的 Data.Zippable
模块,嗯,我还没搞明白这玩意怎么用,不过总感觉杀鸡用牛刀了有点(Template Haskell ,以及其他依赖)。
所以,如果你只是跟我一样,看 Data.List
中的那一砣 zipn
不顺眼的话(其实也只是看着不顺哈,用着还是蛮顺的,反正实现不用我写),一个更简单的方案在此:
|
|
吼吼,够简单的吧。其实这跟 Control.Monad
中的 ap
和 Control.Applicative
中的是一类东东啦,只不过是针对列表的 zip
功能滴。
那要怎么用嗫,也不是很麻烦啦,像这样就可以了:
|
|
这里的 map
所对应的自然就是 Control.Applicative
中的啦。
还有更好玩的哦,如果再加上上一篇博中的不定参函数的话呢:
|
|
那我这次要说得就这么多啦,至于怎么用,就请大家尽情地发挥你们的想象力吧(其实是我想象力不够 :-()