Zum Inhalt springen

Benutzer:Dirk Huenniger/pre

Aus Wikibooks
import Control.Monad.Maybe
import Control.Monad.State
import Control.Monad
import Control.Monad.Trans.Class

main = runStateT ( runMaybeT . forever $ act ) "">>= putStrLn . snd

act :: MaybeT ( StateT String IO ) String
act= do x<- lift readAndUpdate
        if x == "e"
          then mzero
          else return x

readAndUpdate :: ( StateT String IO ) String
readAndUpdate = lift getLine>>= updateState

updateState :: String ->  ( StateT String IO ) String
updateState x = do y<- get
                   put ( y ++ "\n" ++ x )
                   return x








import Control.Monad.Maybe
import Control.Monad.State
import Control.Monad
import Control.Monad.Trans.Class


main2:: IO (Maybe String, String)
main2=  (runStateT (runMaybeT (forever act))) ""

main= main2>>= putStrLn . snd

act::MaybeT (StateT String IO) String
act= (lift ((lift  getLine)>>= (\x ->(get>>= \y->  put (y++"\n"++x))>>
return x)))>>= (\x->if x=="e" then mzero else MaybeT (return (Just x)))