{-# LANGUAGE TypeFamilies #-}
module RSAGL.Auxiliary.RecombinantState
    (RecombinantState(..))
    where

-- | Describes concurrency-aware state.  The goal is to take some stateful information, clone it into a variety of concurrent threads,
-- and then recombine with the (possibly modified) state as the concurrent threads complete.
class RecombinantState s where
    type SubState s :: *
    clone :: s -> SubState s
    recombine :: s -> SubState s -> s

instance RecombinantState () where
    type SubState () = ()
    clone = id
    recombine = const