anchor.diff:           |> List.map (fun x -> x)
            |> List.fold (fun s validator -> v.apl validator s) (Choice.returnM cmd) 
   
  -    let untypedGetId<'TId,'TCmd,'TEvent,'TState, 'TCommandContext, 'TMetadata> (sb : CommandHandler<'TCmd, 'TCommandContext, 'TState, 'TId, 'TEvent,'TMetadata>) (context : 'TCommandContext) (cmd:obj) =
  +    let untypedGetId<'TId,'TCmd,'TEvent,'TState, 'TCommandContext, 'TMetadata, 'TValidatedState> (sb : CommandHandler<'TCmd, 'TCommandContext, 'TState, 'TId, 'TEvent,'TMetadata, 'TValidatedState>) (context : 'TCommandContext) (cmd:obj) =
           match cmd with
           | :? 'TCmd as cmd ->
               sb.GetId context cmd
  
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:             GetId = (fun _ -> MagicMapper.magicId<'TId>)
              StateBuilder = stateBuilder
              Validators = List.empty
              StateValidation = Success
              Handler = (fun _ _ -> f >> Seq.singleton >> Success)
              SystemConfiguration = systemConfiguration
          } : CommandHandler<'TCmd, 'TCommandContext, 'TState, 'TId, 'TEvent,'TMetadata,'TState option> 
  
      let toChoiceValidator cmd r =
          if r |> Seq.isEmpty then
  