如何在Haskell中进行多次eta减少

时间:2014-10-23 22:17:57

标签: haskell

我有一项任务是从[[a]]矩阵中获取一列。

一个简单的解决方案是

colFields :: Int -> [[a]] -> [a]
colFields n c = map (!! n) c

当缩小一级抽象时,它将是

colFields n = map (!! n)

我觉得我可以轻易摆脱n,但我不能这样做。

1 个答案:

答案 0 :(得分:13)

您正在寻找的是

colFields = map . flip (!!)

然而,这一点并不十分清楚,我将n参数留在那里。使用n作为显式参数,我立即了解该函数的作用。没有它,我必须考虑一下,以便理解定义,即使对于像这样的简单案例。

我使用pointfree工具非常简单地获得了这个答案,尽管有一些方法可以手工推导出来。