rank :: [(Name,Mark)] -> Ranks rank xs = map (score xs) xs -- Rang eines bestimmten Tupels berechnen, dazu Filtern der Liste auf alle Elemente, die das aktuelle Tupel „schlagen“ score :: (Name,Mark) -> (Name,Mark,Rank) score xs (xn,xm) = (xn,xm,1 + length (filter (beats xm) xs)) -- Prädikat, ob ein Tupel eine bestimmte Note übertrifft beats xm (yn,ym) = xm < ym