Sto lavorando su yesod che ha percorsi come
/make/something MakeR POST
su quale server genera un oggetto e restituisce il suo ID racchiuso in JSON. Io uso Int
come ID.
Quindi, ho finito per utilizzare un tipo di dati come questo
data Manager
= Manager
{ objects :: IntMap Object
, nextId :: Int
}
Li memorizzo in TVar
in App
. E ogni volta che viene chiamato il gestore per MakeR
, incremento% il campo nextId
di Manager
.
Il problema è che ho molti manager come sopra e voglio astrarre l'incremento del contatore ID.
Un'idea sarebbe quella di usare una monade di stato. Ma, ancora, devo tenere banco da qualche parte. In questo modo non si sente il suono:
data App = App
{ ...
, appAMap :: TVar (IntMap A)
, appACtr :: TVar Int
, appBMap :: TVar (IntMap B)
, appBCtr :: TVar Int
...
}
Esiste uno schema o un approccio che posso utilizzare per automatizzare la generazione di ID senza perdere la solidità?