module ALife.Creatur.Counter
(
Counter(..),
PersistentCounter,
mkPersistentCounter
) where
import ALife.Creatur.Clock (Clock, currentTime, incTime)
import ALife.Creatur.Persistent (Persistent, mkPersistent, getPS, putPS)
import Control.Monad.State (StateT)
class Counter c where
current :: StateT c IO Int
increment :: StateT c IO ()
type PersistentCounter = Persistent Int
mkPersistentCounter :: FilePath -> PersistentCounter
mkPersistentCounter = mkPersistent 0
instance Counter PersistentCounter where
current = getPS
increment = do
k <- getPS
putPS (k+1)
instance Clock PersistentCounter where
currentTime = current
incTime = increment