-- package Main import Control.Monad data KolakoskiStep = Singular Int | Double Int Int deriving (Show) getNext :: [Int] -> Int -> KolakoskiStep getNext kolakoski index = do let current_len = kolakoski !! index let last_len = kolakoski !! (index - 1) let last_val = last kolakoski let len = length kolakoski let last_influenced = (index /= (len - 1)) if current_len == 1 then Singular (3 - last_val) else if last_len == 1 && not last_influenced then Singular last_val else Double (3 - last_val) (3 - last_val) loop kolakoski index = if ((length kolakoski) < 100) then do case getNext kolakoski index of Singular a -> loop (kolakoski ++ [a]) (index + 1) Double a b -> loop (kolakoski ++ [a, b]) (index + 1) else print kolakoski main :: IO () main = do loop [1, 2] 1