anchor.diff:              GetId = (fun _ -> MagicMapper.magicId<'TId>)
               StateBuilder = stateBuilder
               Validators = List.empty
  -            Handler = (fun _ -> f >> Seq.singleton)
  +            StateValidation = Success
  +            Handler = (fun _ _ -> f >> Seq.singleton >> Success)
               SystemConfiguration = systemConfiguration
  -        } : CommandHandler<'TCmd, 'TCommandContext, 'TState, 'TId, 'TEvent,'TMetadata> 
  +        } : CommandHandler<'TCmd, 'TCommandContext, 'TState, 'TId, 'TEvent,'TMetadata,'TState option> 
   
       let toChoiceValidator cmd r =
           if r |> Seq.isEmpty then
  
positive.code:                 return NonEmptyList.singleton (sprintf "Invalid command type: %A expected %A" (cmd.GetType()) typeof<'TCmd>) |> Choice2Of2
              }
          
      let ToInterface (sb : CommandHandler<'TCmd, 'TCommandContext, 'TState, 'TId, 'TEvent,'TMetadata>) = {
          new ICommandHandler<'TEvent,'TId,'TCommandContext,'TMetadata> with 
               member this.GetId context cmd = untypedGetId sb context cmd
               member this.CmdType = typeof<'TCmd>
  
negative.code:     SetMessageId : Guid -> 'TMetadata -> 'TMetadata
  }
  
  type CommandHandler<'TCmd, 'TCommandContext, 'TCommandState, 'TId, 'TEvent,'TMetadata, 'TValidatedState> = {
      GetId : 'TCommandContext -> 'TCmd -> 'TId
      StateBuilder : NamedStateBuilder<'TCommandState, 'TMetadata>
      StateValidation : 'TCommandState option -> Choice<'TValidatedState, NonEmptyList<ValidationFailure>> 
      Validators : Validator<'TCmd,'TCommandState> list
      Handler : 'TValidatedState -> 'TCommandContext -> 'TCmd -> Choice<seq<'TEvent * 'TMetadata>, NonEmptyList<ValidationFailure>>
      SystemConfiguration : SystemConfiguration<'TMetadata>
  }
  
  