-- import Control.Lens import Data.Char import Data.List extract (x:xs) recv = extract xs $ \n s -> if '0' <= x && x <= '9' then recv (n ++ [x]) s else recv n (s ++ [x]) extract [] recv = recv [] [] assemble s = extract s $ \n s -> putStrLn n >> putStrLn s -- assemble' = mapMOf_ both putStrLn . foldl' (\a c -> a & (if isDigit c then _1 else _2) %~ cons c) ([], []) -- assemble'' = mapMOf_ both putStrLn . partition isDigit . reverse main :: IO () main = assemble "x51ca2yz"