public static ObservableComputations.ScalarProcessingVoid <TValue> ScalarProcessing <TValue>(this
                                                                                                     ObservableComputations.IReadScalar <TValue> scalar,
                                                                                                     System.Action <TValue, ScalarProcessingVoid <TValue> > newValueProcessor,
                                                                                                     bool processNow)

        {
            return(new ObservableComputations.ScalarProcessingVoid <TValue>(
                       scalar: scalar,
                       newValueProcessor: newValueProcessor,
                       processNow: processNow));
        }
        public static ObservableComputations.CollectionProcessingVoid <TSourceItem> CollectionProcessing <TSourceItem>(this
                                                                                                                       ObservableComputations.IReadScalar <ObservableCollection <TSourceItem> > sourceScalar,
                                                                                                                       System.Action <TSourceItem, CollectionProcessingVoid <TSourceItem> > newItemProcessor  = null,
                                                                                                                       System.Action <TSourceItem, CollectionProcessingVoid <TSourceItem> > oldItemProcessor  = null,
                                                                                                                       System.Action <TSourceItem, CollectionProcessingVoid <TSourceItem> > moveItemProcessor = null)

        {
            return(new ObservableComputations.CollectionProcessingVoid <TSourceItem>(
                       sourceScalar: sourceScalar,
                       newItemProcessor: newItemProcessor,
                       oldItemProcessor: oldItemProcessor,
                       moveItemProcessor: moveItemProcessor));
        }
        public static ObservableComputations.ScalarProcessing <TValue, TReturnValue> ScalarProcessing <TValue, TReturnValue>(this
                                                                                                                             ObservableComputations.IReadScalar <TValue> scalar,
                                                                                                                             System.Func <TValue, IScalarComputing, TReturnValue, TReturnValue> newValueProcessor)

        {
            return(new ObservableComputations.ScalarProcessing <TValue, TReturnValue>(
                       scalar: scalar,
                       newValueProcessor: newValueProcessor,
                       processNow: true));
        }
        public static ObservableComputations.CollectionProcessing <TSourceItem, TReturnValue> CollectionProcessing <TSourceItem, TReturnValue>(this
                                                                                                                                               ObservableComputations.IReadScalar <ObservableCollection <TSourceItem> > sourceScalar,
                                                                                                                                               System.Func <TSourceItem, ICollectionComputing, TReturnValue> newItemProcessor    = null,
                                                                                                                                               System.Action <TSourceItem, ICollectionComputing, TReturnValue> oldItemProcessor  = null,
                                                                                                                                               System.Action <TSourceItem, ICollectionComputing, TReturnValue> moveItemProcessor = null)

        {
            return(new ObservableComputations.CollectionProcessing <TSourceItem, TReturnValue>(
                       sourceScalar: sourceScalar,
                       newItemProcessor: newItemProcessor,
                       oldItemProcessor: oldItemProcessor));
        }