import Data.List (elemIndex) import Data.Maybe (maybe) vanEck :: Int -> [Int] vanEck n = reverse $ iterate go [] !! n where go [] = [0] go xxs@(x:xs) = maybe 0 succ (elemIndex x xs) : xxs main :: IO () main = do print $ vanEck 10 print $ drop 990 (vanEck 1000)