This is a somewhat odd cellular automaton implementation in Haskell. It encodes the shape of the world, and the stepping rule, in the data structure. Briefly:
data Cell v n = Cell { value :: v, neighbors :: n (Cell v n), future :: Cell v n }
-- Build a cell and its chain of futures, given its rule, similar neighbors, -- and initial value. mkCell :: Functor n => (v -> n v -> v) -> v -> n (Cell v n) -> Cell v n mkCell rule val nei = initial where initial = Cell val nei (calcFuture initial) calcFuture c = c' where c' = Cell (rule (value c) (fmap value (neighbors c))) (fmap future (neighbors c)) (calcFuture c') data Moore c = Moore c c c c c c c c -- Conway's Life evalLife :: Bool -> Moore Bool -> Bool evalLife v n = f v (sumN fromEnum n) where f _ 3 = True f True 2 = True f _ _ = False
The remainder of the code is routines for setting up worlds and displaying them.