creatur 5.2.11 → 5.3.0
raw patch · 2 files changed
+41/−2 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ ALife.Creatur.Universe: instance (Agent a, Serialize a, SizedRecord a) => Universe (CachedUniverse a)
+ ALife.Creatur.Universe: instance Eq a => Eq (CachedUniverse a)
+ ALife.Creatur.Universe: instance Show a => Show (CachedUniverse a)
+ ALife.Creatur.Universe: mkCachedUniverse :: String -> FilePath -> Int -> Int -> CachedUniverse a
Files
- creatur.cabal +2/−2
- src/ALife/Creatur/Universe.hs +39/−0
creatur.cabal view
@@ -1,5 +1,5 @@ Name: creatur-Version: 5.2.11+Version: 5.3.0 Stability: experimental Synopsis: Framework for artificial life experiments. Description: A software framework for automating experiments@@ -36,7 +36,7 @@ source-repository this type: git location: https://github.com/mhwombat/creatur.git- tag: 5.2.11+ tag: 5.3.0 library GHC-Options: -Wall -fno-warn-orphans
src/ALife/Creatur/Universe.hs view
@@ -17,6 +17,7 @@ Universe(..), SimpleUniverse, mkSimpleUniverse,+ mkCachedUniverse, -- * Clock currentTime, incTime,@@ -55,6 +56,7 @@ import qualified ALife.Creatur.Counter as K import qualified ALife.Creatur.Database as D import qualified ALife.Creatur.Database.FileSystem as FS+import qualified ALife.Creatur.Database.CachedFileSystem as CFS import qualified ALife.Creatur.Logger as L import ALife.Creatur.Util (stateMap, shuffle) import Control.Monad.IO.Class (liftIO)@@ -304,5 +306,42 @@ where c = K.mkPersistentCounter (dir ++ "/clock") l = L.mkSimpleRotatingLogger (dir ++ "/log/") name rotateCount d = FS.mkFSDatabase (dir ++ "/db")+ n = N.mkSimpleAgentNamer (name ++ "_") (dir ++ "/namer")+ cl = CL.mkPersistentChecklist (dir ++ "/todo")++data CachedUniverse a = CachedUniverse+ {+ cuClock :: K.PersistentCounter,+ cuLogger :: L.SimpleRotatingLogger,+ cuDB :: (CFS.CachedFSDatabase a),+ cuNamer :: N.SimpleAgentNamer,+ cuChecklist :: CL.PersistentChecklist+ } deriving (Show, Eq)++instance (A.Agent a, Serialize a, D.SizedRecord a)+ => Universe (CachedUniverse a) where+ type Agent (CachedUniverse a) = a+ type Clock (CachedUniverse a) = K.PersistentCounter+ clock = cuClock+ setClock u c = u { cuClock=c }+ type Logger (CachedUniverse a) = L.SimpleRotatingLogger+ logger = cuLogger+ setLogger u l = u { cuLogger=l }+ type AgentDB (CachedUniverse a) = CFS.CachedFSDatabase a+ agentDB = cuDB+ setAgentDB u d = u { cuDB=d }+ type AgentNamer (CachedUniverse a) = N.SimpleAgentNamer+ agentNamer = cuNamer+ setAgentNamer u n = u { cuNamer=n }+ type Checklist (CachedUniverse a) = CL.PersistentChecklist+ checklist = cuChecklist+ setChecklist u cl = u { cuChecklist=cl }++mkCachedUniverse :: String -> FilePath -> Int -> Int -> CachedUniverse a+mkCachedUniverse name dir rotateCount cacheSize+ = CachedUniverse c l d n cl+ where c = K.mkPersistentCounter (dir ++ "/clock")+ l = L.mkSimpleRotatingLogger (dir ++ "/log/") name rotateCount+ d = CFS.mkCachedFSDatabase (dir ++ "/db") cacheSize n = N.mkSimpleAgentNamer (name ++ "_") (dir ++ "/namer") cl = CL.mkPersistentChecklist (dir ++ "/todo")