recaman :: Int -> [Int] recaman n = fst <$> reverse (go n) where go 0 = [] go 1 = [(0, 1)] go x = let xs@((r, i):_) = go (pred x) back = r - i in ( if 0 < back && not (any ((back ==) . fst) xs) then back else r + i , succ i) : xs main :: IO () main = print $ recaman 15