这是相当疯狂的编写代码。让我们尝试一块一块地解决它。
首先,t1是一个类型的元组(a,b,c)。让我们写下来t1 = (x,y,z),试着弄清楚。很清楚a是String和x是"p1"。
第二个组成部分是((take 2) . tail) mnr,这是take 2 [1,2,3,4,5,6],这是[1,2]。如此,如此。b_ 说得通。[Int]y[1,2]
第三部分写得很奇怪。首先,
let no n = name in no
简单地定义了一个函数\n -> name,即返回的常量函数name。这写得更好const name。这样你就有了构图(take 3) . words . (const name),然后你把它应用到"No". 嗯,(const name) "No"显然只是name,即"Max Mustermann"。所以words应用到 this is ["Max", "Mustermann"],然后take 3得到前三个元素,这又是["Max", "Mustermann"]。这就是z上面,并表明它c是[String].
总而言之,你最终t1拥有 type(String, [Int], [String])和 value ("p1", [1,2], ["Max", "Mustermann"])。
应该清理第三个组件的代码,但是如何清理它取决于您以后真正想做的事情。然而,就目前而言,它非常复杂,只会让你和其他人感到困惑。