packages feed

creatur 5.9.28 → 5.9.30

raw patch · 42 files changed

+249/−209 lines, 42 filesdep ~MonadRandomdep ~arraydep ~binary

Dependency ranges changed: MonadRandom, array, binary, bytestring, cereal, cond, directory, exceptions, filepath, gray-extended, hdaemonize, hsyslog, mtl, random, split, time, transformers, unix

Files

+ CHANGELOG.md view
@@ -0,0 +1,17 @@+# Changelog for creatur++5.9.30 Automatically archive agents that trigger errors.+       Support newer versions of binary, time.++5.9.29 Report user and group when launching daemon.++5.9.28 Upgraded to work with NixOS + cabal-install.++5.9.27 Upgraded to lts-12.16.++5.9.25 Fixed copyright year.++5.9.24 Revamped to work with Stack v1.7.1.+       Added exception handling.++## Unreleased changes
− ChangeLog.md
@@ -1,12 +0,0 @@-# Changelog for creatur--5.9.28 Upgraded to work with NixOS + cabal-install.--5.9.27 Upgraded to lts-12.16.--5.9.25 Fixed copyright year.--5.9.24 Revamped to work with Stack v1.7.1.-       Added exception handling.--## Unreleased changes
LICENSE view
@@ -1,27 +1,30 @@-Copyright Amy de Buitléir (c) 2010-2018+Copyright (c) 2010-2021, Amy de Buitléir  All rights reserved.  Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: -* Redistributions of source code must retain the above copyright -  notice, this list of conditions and the following disclaimer.-* Redistributions in binary form must reproduce the above copyright-  notice, this list of conditions and the following disclaimer in the-  documentation and/or other materials provided with the distribution.-* Neither the name of the author nor the names of other contributors-  may be used to endorse or promote products derived from this software-  without specific prior written permission.+    * Redistributions of source code must retain the above copyright+      notice, this list of conditions and the following disclaimer. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS-IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +    * Redistributions in binary form must reproduce the above+      copyright notice, this list of conditions and the following+      disclaimer in the documentation and/or other materials provided+      with the distribution.++    * Neither the name of Amy de Buitléir nor the names of other+      contributors may be used to endorse or promote products derived+      from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
creatur.cabal view
@@ -1,110 +1,112 @@-name:           creatur-version:        5.9.28-synopsis:       Framework for artificial life experiments.-description:    Please see the README on GitHub at <https://github.com/mhwombat/creatur#readme>-category:       AI-homepage:       https://github.com/mhwombat/creatur#readme-bug-reports:    https://github.com/mhwombat/creatur/issues-author:         Amy de Buitléir-maintainer:     amy@nualeargais.ie-copyright:      2012-2019 Amy de Buitléir-license:        BSD3-license-file:   LICENSE-build-type:     Simple-cabal-version:  >= 1.10+cabal-version:      2.4+synopsis:           Framework for artificial life experiments.+name:               creatur+version:            5.9.30+description:+  Please see the README on GitHub at <https://github.com/mhwombat/creatur#readme>+homepage:           https://github.com/mhwombat/creatur+bug-reports:        https://github.com/mhwombat/creatur/issues+license:            BSD-3-Clause+license-file:       LICENSE+author:             Amy de Buitléir+maintainer:         amy@nualeargais.ie+copyright:          2012-2021 Amy de Buitléir+category:           AI extra-source-files:-    ChangeLog.md-    README.md+  CHANGELOG.md+  README.md  source-repository head-  type: git+  type:     git   location: https://github.com/mhwombat/creatur +common common-stuff+  default-language: Haskell2010+ library+  import:          common-stuff+  hs-source-dirs:  src   exposed-modules:-      ALife.Creatur-      ALife.Creatur.Checklist-      ALife.Creatur.Clock-      ALife.Creatur.Counter-      ALife.Creatur.Daemon-      ALife.Creatur.Database-      ALife.Creatur.Database.CachedFileSystem-      ALife.Creatur.Database.CachedFileSystemInternal-      ALife.Creatur.Database.FileSystem-      ALife.Creatur.Genetics.Analysis-      ALife.Creatur.Genetics.BRGCBool-      ALife.Creatur.Genetics.BRGCWord16-      ALife.Creatur.Genetics.BRGCWord8-      ALife.Creatur.Genetics.Diploid-      ALife.Creatur.Genetics.Recombination-      ALife.Creatur.Genetics.Reproduction.Sexual-      ALife.Creatur.Genetics.Reproduction.SimplifiedSexual-      ALife.Creatur.Logger-      ALife.Creatur.Logger.SimpleLogger-      ALife.Creatur.Logger.SimpleRotatingLogger-      ALife.Creatur.Namer-      ALife.Creatur.Persistent-      ALife.Creatur.Task-      ALife.Creatur.Universe-      ALife.Creatur.Util-  other-modules:-      Paths_creatur-  hs-source-dirs:-      src+    ALife.Creatur+    ALife.Creatur.Checklist+    ALife.Creatur.Clock+    ALife.Creatur.Counter+    ALife.Creatur.Daemon+    ALife.Creatur.Database+    ALife.Creatur.Database.CachedFileSystem+    ALife.Creatur.Database.CachedFileSystemInternal+    ALife.Creatur.Database.FileSystem+    ALife.Creatur.Genetics.Analysis+    ALife.Creatur.Genetics.BRGCBool+    ALife.Creatur.Genetics.BRGCWord16+    ALife.Creatur.Genetics.BRGCWord8+    ALife.Creatur.Genetics.Diploid+    ALife.Creatur.Genetics.Recombination+    ALife.Creatur.Genetics.Reproduction.Sexual+    ALife.Creatur.Genetics.Reproduction.SimplifiedSexual+    ALife.Creatur.Logger+    ALife.Creatur.Logger.SimpleLogger+    ALife.Creatur.Logger.SimpleRotatingLogger+    ALife.Creatur.Namer+    ALife.Creatur.Persistent+    ALife.Creatur.Task+    ALife.Creatur.Universe+    ALife.Creatur.Util+  other-modules:   Paths_creatur+  autogen-modules: Paths_creatur+  ghc-options:     -Wall -Wunused-packages   build-depends:-      MonadRandom >= 0.5.1 && < 0.6-    , array >= 0.5.2 && < 0.6-    , base >=4.7 && <5-    , binary ==0.8.*-    , bytestring >= 0.10.8 && < 0.11-    , cereal >= 0.5.7 && < 0.6-    , cond >= 0.4.1 && < 0.5-    , directory >= 1.3.1 && < 1.4-    , exceptions >= 0.10.0 && < 0.11-    , filepath >= 1.4.2 && < 1.5-    , gray-extended >= 1.5.4 && < 1.6-    , hdaemonize >= 0.5.5 && < 0.6-    , hsyslog >= 5.0.1 && < 5.1-    , mtl >= 2.2.2 && < 2.3-    , random >= 1.1 && < 1.2-    , split >= 0.2.3 && < 0.3-    , time ==1.8.*-    , transformers >= 0.5.5 && < 0.6-    , unix >= 2.7.2 && < 2.8-  default-language: Haskell2010+    , array          ^>=0.5.2+    , base           >=4.7    && <5+    , binary         >=0.8    && <0.11+    , bytestring     >=0.10.8 && <0.12+    , cereal         ^>=0.5.7+    , cond           ^>=0.4.1+    , directory      ^>=1.3.1+    , exceptions     ^>=0.10.0+    , filepath       ^>=1.4.2+    , gray-extended  ^>=1.5.9+    , hdaemonize     ^>=0.5.5+    , hsyslog        ^>=5.0.1+    , MonadRandom    ^>=0.5.1+    , mtl            ^>=2.2.2+    , random         >=1.1    && <1.3+    , split          ^>=0.2.3+    , time           >=1.1    && <1.13+    , transformers   >=0.5.5  && <0.7+    , unix           ^>=2.7.2  test-suite creatur-test-  type: exitcode-stdio-1.0-  main-is: Spec.hs+  import:         common-stuff+  type:           exitcode-stdio-1.0+  hs-source-dirs: test+  main-is:        Spec.hs   other-modules:-      ALife.Creatur.ChecklistQC-      ALife.Creatur.CounterQC-      ALife.Creatur.Database.CachedFileSystemQC-      ALife.Creatur.Database.FileSystemQC-      ALife.Creatur.Genetics.BRGCBoolQC-      ALife.Creatur.Genetics.BRGCWord16QC-      ALife.Creatur.Genetics.BRGCWord8QC-      ALife.Creatur.Genetics.DiploidQC-      ALife.Creatur.Genetics.RecombinationQC-      ALife.Creatur.PersistentQC-      ALife.Creatur.UniverseQC-      ALife.Creatur.UtilQC-      Paths_creatur-  hs-source-dirs:-      test-  ghc-options: -threaded -rtsopts -with-rtsopts=-N+    ALife.Creatur.ChecklistQC+    ALife.Creatur.CounterQC+    ALife.Creatur.Database.CachedFileSystemQC+    ALife.Creatur.Database.FileSystemQC+    ALife.Creatur.Genetics.BRGCBoolQC+    ALife.Creatur.Genetics.BRGCWord16QC+    ALife.Creatur.Genetics.BRGCWord8QC+    ALife.Creatur.Genetics.DiploidQC+    ALife.Creatur.Genetics.RecombinationQC+    ALife.Creatur.PersistentQC+    ALife.Creatur.UniverseQC+    ALife.Creatur.UtilQC+  ghc-options:+    -threaded -rtsopts -with-rtsopts=-N -Wall -Wunused-packages   build-depends:-      HUnit-    , MonadRandom-    , QuickCheck     , base     , cereal     , creatur     , directory     , filepath+    , HUnit+    , MonadRandom     , mtl+    , QuickCheck     , temporary     , test-framework     , test-framework-hunit     , test-framework-quickcheck2-  default-language: Haskell2010
src/ALife/Creatur.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur--- Copyright   :  (c) Amy de Buitléir 2012-2019+-- Copyright   :  (c) 2012-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental
src/ALife/Creatur/Checklist.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.Checklist--- Copyright   :  (c) Amy de Buitléir 2013-2019+-- Copyright   :  (c) 2013-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental
src/ALife/Creatur/Clock.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.Clock--- Copyright   :  (c) Amy de Buitléir 2012-2019+-- Copyright   :  (c) 2012-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental
src/ALife/Creatur/Counter.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.Counter--- Copyright   :  (c) Amy de Buitléir 2012-2019+-- Copyright   :  (c) 2012-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental
src/ALife/Creatur/Daemon.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.Daemon--- Copyright   :  (c) Amy de Buitléir 2012-2019+-- Copyright   :  (c) 2012-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental@@ -11,8 +11,8 @@ -- framework. -- -------------------------------------------------------------------------{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE TypeFamilies     #-}  module ALife.Creatur.Daemon   (@@ -24,19 +24,22 @@     requestShutdown   ) where -import Control.Concurrent (MVar, newMVar, readMVar, swapMVar,-  threadDelay)-import Control.Exception (SomeException, handle, catch)-import Control.Monad (when)-import Control.Monad.State (StateT, execStateT)-import Foreign.C.String (withCStringLen)-import System.IO (hPutStrLn, stderr)-import System.IO.Unsafe (unsafePerformIO)+import           Control.Concurrent+    (MVar, newMVar, readMVar, swapMVar, threadDelay)+import           Control.Exception      (SomeException, catch, handle)+import           Control.Monad          (when)+import           Control.Monad.State    (StateT, execStateT)+import           Foreign.C.String       (withCStringLen)+import           System.IO              (hPutStrLn, stderr)+import           System.IO.Unsafe       (unsafePerformIO) import qualified System.Posix.Daemonize as D-import System.Posix.Signals (Handler(Catch), fullSignalSet,-  installHandler, sigTERM)-import System.Posix.Syslog (Priority(Warning), Facility(Daemon), syslog)-import System.Posix.User (getLoginName, getRealUserID)+import           System.Posix.Signals+    (Handler (Catch), fullSignalSet, installHandler, sigTERM)+import           System.Posix.Syslog+    (Facility (Daemon), Priority (Warning), syslog)+import           System.Posix.User+    (getGroupEntryForID, getLoginName, getRealGroupID, getRealUserID,+    groupName)  termReceived :: MVar Bool termReceived = unsafePerformIO (newMVar False)@@ -45,21 +48,21 @@ data Job s = Job   {     -- | Operations to perform on startup.-    onStartup :: s -> IO s,+    onStartup   :: s -> IO s,     -- | Operations to perform on shutdown.-    onShutdown :: s -> IO (),+    onShutdown  :: s -> IO (),     -- | Operations to perform if an exception occurs.     onException :: s -> SomeException -> IO s,     -- | Operations to perform repeatedly while running.-    task :: StateT s IO (),+    task        :: StateT s IO (),     -- | Number of microseconds to sleep between invocations of @'task'@.-    sleepTime :: Int+    sleepTime   :: Int   }  data CreaturDaemon p s = CreaturDaemon   {     daemon :: D.CreateDaemon p,-    job :: Job s+    job    :: Job s   }  -- | Creates a simple daemon to run a job. The daemon will run under@@ -80,7 +83,9 @@     then putStrLn "Must run as root"     else do       u <- defaultToLoginName (D.user . daemon $ d)-      g <- defaultToLoginName (D.user . daemon $ d)+      g <- defaultToGroupName (D.user . daemon $ d)+      putStrLn $ "Launching daemon as user " ++ show u+                   ++ ", group " ++ show g       let d' = (daemon d) { D.user = u, D.group = g }       catch (D.serviced d') handleLaunchError @@ -98,7 +103,14 @@  defaultToLoginName :: Maybe String -> IO (Maybe String) defaultToLoginName (Just "") = fmap Just getLoginName-defaultToLoginName x = return x+defaultToLoginName x         = return x++defaultToGroupName :: Maybe String -> IO (Maybe String)+defaultToGroupName (Just "") = fmap Just getGroupName+defaultToGroupName x         = return x++getGroupName :: IO String+getGroupName = fmap groupName $ getRealGroupID >>= getGroupEntryForID  daemonMain :: Job s -> s -> () -> IO () daemonMain t s _ = do
src/ALife/Creatur/Database.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.Database--- Copyright   :  (c) Amy de Buitléir 2012-2019+-- Copyright   :  (c) 2012-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental
src/ALife/Creatur/Database/CachedFileSystem.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.Database.CachedFileSystem--- Copyright   :  (c) Amy de Buitléir 2014-2019+-- Copyright   :  (c) 2014-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental
src/ALife/Creatur/Database/CachedFileSystemInternal.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.Database.CachedFileSystemInternal--- Copyright   :  (c) Amy de Buitléir 2014-2019+-- Copyright   :  (c) 2014-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental
src/ALife/Creatur/Database/FileSystem.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.Database.FileSystem--- Copyright   :  (c) Amy de Buitléir 2012-2019+-- Copyright   :  (c) 2012-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental
src/ALife/Creatur/Genetics/Analysis.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.Genetics.Analysis--- Copyright   :  (c) Amy de Buitléir 2013-2019+-- Copyright   :  (c) 2013-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental
src/ALife/Creatur/Genetics/BRGCBool.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.Genetics.BRGCBool--- Copyright   :  (c) Amy de Buitléir 2013-2019+-- Copyright   :  (c) 2013-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental
src/ALife/Creatur/Genetics/BRGCWord16.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.Genetics.BRGCWord16--- Copyright   :  (c) Amy de Buitléir 2014-2019+-- Copyright   :  (c) 2014-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental
src/ALife/Creatur/Genetics/BRGCWord8.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.Genetics.BRGCWord8--- Copyright   :  (c) Amy de Buitléir 2013-2019+-- Copyright   :  (c) 2013-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental@@ -165,7 +165,7 @@                      then Right (L, "L1")                      else Right (R, "R1") convertLR _ = Left "logic error"-  + -- | Sums: encode choice between constructors instance (GGenetic a) => GGenetic (M1 i c a) where   gput (M1 x) = gput x@@ -299,7 +299,7 @@         f m y bs = f (m-1) y' (b:bs)           where y' = y `div` 0x100                 b = fromIntegral $ y `mod` 0x100- + bytesToIntegral :: Integral t => [Word8] -> t bytesToIntegral bs = f (bs, 0)   where f ([], n) = n@@ -324,7 +324,7 @@   if null mss     then return $ Right xs     else return $ Left (head mss)- + -- | Write a Word8 value to the genome without encoding it putRawWord8 :: Word8 -> Writer () putRawWord8 x = do@@ -356,16 +356,16 @@   (xs, msgs) <- S.get   let msg = show (length xs) ++ ": wrote " ++ desc   S.put (xs, msg:msgs)-  + putAndReport :: [Word8] -> String -> Writer () putAndReport bytes msg = putRawWord8s bytes >> reportW msg  replaceReportW :: String -> Writer () replaceReportW desc = do-  (xs, _:msgs) <- S.get+  ~(xs, _:msgs) <- S.get   let msg = show (length xs) ++ ": wrote " ++ desc   S.put (xs, msg:msgs)-  + reportR :: String -> Reader () reportR desc = do   (xs, i, msgs) <- S.get@@ -383,10 +383,10 @@  replaceReportR :: String -> Reader () replaceReportR desc = do-  (xs, i, _:msgs) <- S.get+  ~(xs, i, _:msgs) <- S.get   let msg = show i ++ ": read " ++ desc   S.put (xs, i, msg:msgs)-  + -- -- Diploid genes --
src/ALife/Creatur/Genetics/Diploid.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.Genetics.Diploid--- Copyright   :  (c) Amy de Buitléir 2013-2019+-- Copyright   :  (c) 2013-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental
src/ALife/Creatur/Genetics/Recombination.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.Genetics.Recombination--- Copyright   :  (c) Amy de Buitléir 2011-2019+-- Copyright   :  (c) 2011-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental
src/ALife/Creatur/Genetics/Reproduction/Sexual.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.Genetics.Reproduction.Sexual--- Copyright   :  (c) Amy de Buitléir 2012-2019+-- Copyright   :  (c) 2012-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental
src/ALife/Creatur/Genetics/Reproduction/SimplifiedSexual.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.Genetics.Reproduction.SimplifiedSexual--- Copyright   :  (c) Amy de Buitléir 2012-2019+-- Copyright   :  (c) 2012-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental
src/ALife/Creatur/Logger.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.Logger--- Copyright   :  (c) Amy de Buitléir 2011-2019+-- Copyright   :  (c) 2011-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental
src/ALife/Creatur/Logger/SimpleLogger.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.Logger.SimpleLogger--- Copyright   :  (c) Amy de Buitléir 2011-2019+-- Copyright   :  (c) 2011-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental
src/ALife/Creatur/Logger/SimpleRotatingLogger.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.Logger.SimpleRotatingLogger--- Copyright   :  (c) Amy de Buitléir 2011-2019+-- Copyright   :  (c) 2011-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental
src/ALife/Creatur/Namer.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.Namer--- Copyright   :  (c) Amy de Buitléir 2012-2019+-- Copyright   :  (c) 2012-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental
src/ALife/Creatur/Persistent.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.Persistent--- Copyright   :  (c) Amy de Buitléir 2012-2019+-- Copyright   :  (c) 2012-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental
src/ALife/Creatur/Task.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.Task--- Copyright   :  (c) Amy de Buitléir 2012-2019+-- Copyright   :  (c) 2012-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental
src/ALife/Creatur/Universe.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.Universe--- Copyright   :  (c) Amy de Buitléir 2012-2019+-- Copyright   :  (c) 2012-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental@@ -10,7 +10,10 @@ -- Provides a habitat for artificial life. -- -------------------------------------------------------------------------{-# LANGUAGE TypeFamilies, FlexibleContexts, FlexibleInstances, ScopedTypeVariables #-}+{-# LANGUAGE FlexibleContexts    #-}+{-# LANGUAGE FlexibleInstances   #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeFamilies        #-} module ALife.Creatur.Universe   (     -- * Constructors@@ -49,24 +52,28 @@     markDone  ) where -import Prelude hiding (lookup)+import           Prelude                                 hiding (lookup) -import qualified ALife.Creatur as A-import qualified ALife.Creatur.Namer as N-import qualified ALife.Creatur.Checklist as CL-import qualified ALife.Creatur.Clock as C-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                           as A+import qualified ALife.Creatur.Checklist                 as CL+import qualified ALife.Creatur.Clock                     as C+import qualified ALife.Creatur.Counter                   as K+import qualified ALife.Creatur.Database                  as D import qualified ALife.Creatur.Database.CachedFileSystem as CFS-import qualified ALife.Creatur.Logger as L-import qualified ALife.Creatur.Logger.SimpleLogger as SL-import ALife.Creatur.Util (stateMap, shuffle)-import Control.Monad.IO.Class (liftIO)-import Control.Monad.Random (evalRandIO)-import Control.Monad.State (StateT, get)-import Data.Either (partitionEithers)-import Data.Serialize (Serialize)+import qualified ALife.Creatur.Database.FileSystem       as FS+import qualified ALife.Creatur.Logger                    as L+import qualified ALife.Creatur.Logger.SimpleLogger       as SL+import qualified ALife.Creatur.Namer                     as N+import           ALife.Creatur.Util                      (shuffle, stateMap)+import           Control.Exception                       (SomeException)+import           Control.Monad.Catch                     (catchAll)+import           Control.Monad.IO.Class                  (liftIO)+import           Control.Monad.Random                    (evalRandIO)+import           Control.Monad.State                     (StateT, get)+import           Data.Either                             (partitionEithers)+import           Data.Serialize                          (Serialize)+import           GHC.Stack+    (callStack, prettyCallStack)  -- | A habitat containing artificial life. class (C.Clock (Clock u), L.Logger (Logger u), D.Database (AgentDB u),@@ -233,7 +240,7 @@     Left msg ->       writeToLog $ "Unable to read '" ++ name ++ "': " ++ msg     Right a ->-      program a >>= store+      catchAll (program a >>= store) (handleException . A.agentId $ a)  -- | A program involving multiple agents. --   The input parameter is a list of agents.@@ -245,8 +252,19 @@ withAgents   :: (Universe u, Serialize (Agent u))     => AgentsProgram u -> [A.AgentId] -> StateT u IO ()-withAgents program names = getAgents names >>= program >>= mapM_ store+withAgents program names = do+  as <- getAgents names+  catchAll (program as >>= mapM_ store)+      (handleException . A.agentId  . head $ as) +handleException+  :: (Universe u, Serialize (Agent u))+    => A.AgentId -> SomeException -> StateT u IO ()+handleException a e = do+  writeToLog $ "WARNING: Unhandled exception: " ++ show e+  writeToLog $ "WARNING: Call stack: " ++ prettyCallStack callStack+  archive a+ -- | Returns the current lineup of (living) agents in the universe. --   Note: Check for @'endOfRound'@ and call @'refreshLineup'@ if needed --   before invoking this function.@@ -283,10 +301,10 @@  data SimpleUniverse a = SimpleUniverse   {-    suClock :: K.PersistentCounter,-    suLogger :: SL.SimpleLogger,-    suDB :: FS.FSDatabase a,-    suNamer :: N.SimpleNamer,+    suClock     :: K.PersistentCounter,+    suLogger    :: SL.SimpleLogger,+    suDB        :: FS.FSDatabase a,+    suNamer     :: N.SimpleNamer,     suChecklist :: CL.PersistentChecklist   } deriving (Show, Eq) @@ -319,10 +337,10 @@  data CachedUniverse a = CachedUniverse   {-    cuClock :: K.PersistentCounter,-    cuLogger :: SL.SimpleLogger,-    cuDB :: CFS.CachedFSDatabase a,-    cuNamer :: N.SimpleNamer,+    cuClock     :: K.PersistentCounter,+    cuLogger    :: SL.SimpleLogger,+    cuDB        :: CFS.CachedFSDatabase a,+    cuNamer     :: N.SimpleNamer,     cuChecklist :: CL.PersistentChecklist   } deriving (Show, Eq) 
src/ALife/Creatur/Util.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.Util--- Copyright   :  (c) Amy de Buitléir 2011-2019+-- Copyright   :  (c) 2011-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental
test/ALife/Creatur/ChecklistQC.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.ChecklistQC--- Copyright   :  (c) Amy de Buitléir 2013-2019+-- Copyright   :  (c) 2013-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental
test/ALife/Creatur/CounterQC.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.CounterQC--- Copyright   :  (c) Amy de Buitléir 2012-2019+-- Copyright   :  (c) 2012-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental
test/ALife/Creatur/Database/CachedFileSystemQC.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.Database.CachedFileSystemQC--- Copyright   :  (c) Amy de Buitléir 2014-2019+-- Copyright   :  (c) 2014-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental
test/ALife/Creatur/Database/FileSystemQC.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.Database.FileSystemQC--- Copyright   :  (c) Amy de Buitléir 2012-2019+-- Copyright   :  (c) 2012-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental
test/ALife/Creatur/Genetics/BRGCBoolQC.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.Genetics.BRGCBoolQC--- Copyright   :  (c) Amy de Buitléir 2013-2019+-- Copyright   :  (c) 2013-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental
test/ALife/Creatur/Genetics/BRGCWord16QC.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.Genetics.BRGCWord16QC--- Copyright   :  (c) Amy de Buitléir 2014-2019+-- Copyright   :  (c) 2014-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental
test/ALife/Creatur/Genetics/BRGCWord8QC.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.Genetics.BRGCWord8QC--- Copyright   :  (c) Amy de Buitléir 2013-2019+-- Copyright   :  (c) 2013-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental
test/ALife/Creatur/Genetics/DiploidQC.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.Genetics.DiploidQC--- Copyright   :  (c) Amy de Buitléir 2013-2019+-- Copyright   :  (c) 2013-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental
test/ALife/Creatur/Genetics/RecombinationQC.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.Genetics.RecombinationQC--- Copyright   :  (c) Amy de Buitléir 2012-2019+-- Copyright   :  (c) 2012-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental
test/ALife/Creatur/PersistentQC.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.PersistentQC--- Copyright   :  (c) Amy de Buitléir 2012-2019+-- Copyright   :  (c) 2012-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental
test/ALife/Creatur/UniverseQC.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.UniverseQC--- Copyright   :  (c) Amy de Buitléir 2012-2019+-- Copyright   :  (c) 2012-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental
test/ALife/Creatur/UtilQC.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  ALife.Creatur.UtilQC--- Copyright   :  (c) Amy de Buitléir 2012-2019+-- Copyright   :  (c) 2012-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental
test/Spec.hs view
@@ -1,7 +1,7 @@ ------------------------------------------------------------------------ -- | -- Module      :  Main--- Copyright   :  (c) Amy de Buitléir 2012-2019+-- Copyright   :  (c) 2012-2021 Amy de Buitléir -- License     :  BSD-style -- Maintainer  :  amy@nualeargais.ie -- Stability   :  experimental