Haskell99题中的代码含义

Code meaning in Haskell 99 problems

我一直在研究第 99 Haskell 题挑战和第 1 题的解决方案之一。 3 - 获取列表的第 k 个元素,从 1 开始计数,而不是 0 - 是:

elementAt''' xs n = head $ foldr ($) xs $ replicate (n - 1) tail

我知道,给定一个列表,我们可以执行 (n - 1) tail 次操作,最终列表的第一个元素就是我们要查找的元素。正如所写,foldr的累加器的初始值是给定的列表,但我无法识别第二个参数,它应该是一个列表,对吧?

如果您能解释一下 foldr 的第一步,我将不胜感激。

列表参数是replicate (n - 1) tail,这是一个包含函数tail(n-1)次的列表。所以我们有 ($) 作为函数,xs 作为初始元素,[tail, tail, ..., tail] 作为列表。所以折叠的结果是tail $ tail $ ... $ tail $ xs.