import Control
.Monad.State
data Person = Person {
startState = 0
tick
:: State MyState
Inttick = do
n <- get
put (n+1)
names = ["Adam","Barney","Charlie"]
(persons, lastId) = (`runState` startState) $ do
forM names $ \thisName -> do
newId <- tick
return $ Person newId thisName
aW1wb3J0IENvbnRyb2wuTW9uYWQuU3RhdGUKCmRhdGEgUGVyc29uID0gUGVyc29uIHsKICBpZCAgIDo6IEludCwKICBuYW1lIDo6IFN0cmluZwp9IGRlcml2aW5nIFNob3cKCnR5cGUgTXlTdGF0ZSA9IEludApzdGFydFN0YXRlID0gMAoKdGljayA6OiBTdGF0ZSBNeVN0YXRlIEludAp0aWNrID0gZG8KICBuIDwtIGdldAogIHB1dCAobisxKQogIHJldHVybiBuCgpuYW1lcyA9IFsiQWRhbSIsIkJhcm5leSIsIkNoYXJsaWUiXQoKKHBlcnNvbnMsIGxhc3RJZCkgPSAoYHJ1blN0YXRlYCBzdGFydFN0YXRlKSAkIGRvCiAgIGZvck0gbmFtZXMgJCBcdGhpc05hbWUgLT4gZG8KICAgICAgbmV3SWQgPC0gdGljawogICAgICByZXR1cm4gJCBQZXJzb24gbmV3SWQgdGhpc05hbWUKCm1haW4gPSBwcmludCBwZXJzb25z