anchor.diff:  
       open FSharpx.Option
   
  -    type EventModel (connection : IEventStoreConnection) =
  +    type IStateBuilder =
  +        inherit IComparable
  +        abstract member Fold : obj -> obj -> obj
  +        abstract member Zero : obj
  +
  +    type cmdHandler = obj -> (string * IStateBuilder * (obj -> Choice<seq<obj>, seq<string>>))
  +
  +    type EventProcessingConfiguration = {
  +        CommandHandlers : Map<string, cmdHandler>
  +        StateBuilders: Set<IStateBuilder>
  +        EventHandlers : Map<string, obj -> (string *  IStateBuilder * unit -> seq<string>)>
  +    }
  +    with static member Empty = { CommandHandlers = Map.empty; StateBuilders = Set.empty; EventHandlers = Map.empty } 
  +
  +    type EventModel (connection : IEventStoreConnection, config : EventProcessingConfiguration) =
           let mutable handlers : Map<string, ResolvedEvent -> option<string * seq<obj>>> = Map.empty
   
           member x.RegisterHandler<'TEvt> (handler : 'TEvt -> option<string * seq<obj>>) =
  
positive.code:             } |> ignore
  
          member x.RunCommand cmd streamId =
              let eventData = new EventData(Guid.NewGuid(), typeof<PersonAddedEvent>.Name, true, serialize cmd, null)
              connection.AppendToStream(streamId, EventStore.ClientAPI.ExpectedVersion.NoStream, eventData)
              ()
  
      [<Fact>]
      let ``blah`` () : unit =
  
negative.code:                 ParentId = Some parentId
              }
  
              do! model.RunCommand addParentCmd (parentId.ToString()) |> Async.Ignore
              do! model.RunCommand addChildCmd (childId.ToString()) |> Async.Ignore
  
              do! Async.Sleep(1000)
  
  