Answer

import Data.Functor.Identity
import Control.Monad.State

type Stack a = State [a]

processAsStack :: 
   [a] -> Stack a () -> [a]
processAsStack lst process =
   snd (runState process lst)

pop ::  Stack a a 
pop  = state $ \(x:xs) -> (x,xs)

push :: a -> Stack a () 
push x = state $ \lst -> ((),x:lst)

printList lst = putStrLn (show lst)

main =
 printList  $
   processAsStack 
     "ct" 
     $ do 
        x <- pop
        push 'a'
        push x