diff --git a/GOL/Engine.hs b/GOL/Engine.hs index c07b024..46fdbb2 100644 --- a/GOL/Engine.hs +++ b/GOL/Engine.hs @@ -11,3 +11,20 @@ import GOL.Space type GOL f = EnvT Rule (Store f) +getNeighbors :: forall s f a. Space s f => GOL f a -> [a] +getNeighbors = experiment $ neighbors @s @f + +nextState :: Space s f => GOL f Bool -> Bool +nextState = do + selfState <- extract + neighborStates <- getNeighbors + let count = sum . fmap (bool 0 1) $ neighborStates + + Rule survive birth <- ask + return $ if selfState + then survive count + else birth count + + +tick :: Space s f => GOL f Bool -> GOL f Bool +tick = extend nextState \ No newline at end of file