module Main where

{- Hier eine Passende Definition der State-Monade einfügen...  -}
{- z.B. Control.Monad.Trans.State aus dem transformers-package -}
{- oder Control.Monad.State aus dem veralteten mtl-package     -}

type CountState = (Bool, Int)
 
startState :: CountState
startState = (False, 0)

play :: String -> State CountState Int
play []     = do
              (_, score) <- get
              return score
play (x:xs) = do
 (on, score) <- get
 case x of
   'C' -> if on then put (on, score + 1) else put (on, score)
   'A' -> if on then put (on, score - 1) else put (on, score)
   'T' -> put (False, score)
   'G' -> put (True, score)
   _   -> put (on, score)
 play xs

main = print $ runState (play "GACAACTCGAAT") startState
-- -> (-3,(False,-3))