もしかしてこんな感じですか?
addHP :: Int -> StateT Player IO ()
addHP h = do
oldp <- get
liftIO $ putStrLn $ "OldHP: " ++ (show$hp oldp)
put $ oldp {hp=(hp oldp)+h}
return ()

main = runStateT (addHP 7) (Player 8) >>= print