import Data.List --sort und reverse hIndex :: (Num a, Ord a) => [a] -> a hIndex l = helper (reverse (sort l)) 0 where helper [] acc = acc helper (z:ls) acc | z > acc = helper ls (acc + 1) | otherwise = acc -- Alternativ hindex1 = length . takeWhile id . zipWith (<=) [1..] . reverse . sort hindex2 = length . takeWhile (\(i, n) -> n >= i) . zip [1..] . reverse . sort