import Control.Monad.State.Lazy f = (takeWhile(/="")).evalState(mapM(state.splitAt)$(2^)<$>[0..]) main :: IO () main = do putStr $ show $ f "abcdefghijklmno"