static Func <FraudResult> CheckFraud(CheckFraudRequest request, ICheckFraudHandler handler) => () => handler.Handle(request);
static Chain <FraudResult> ContinueIf(CheckFraudRequest request, Chain <FraudResult> result, ICheckFraudHandler handler) => result.ContinueIf(CheckFraud(request, handler), IsNotFraudulent);
FraudResult CheckFraud(CheckFraudRequest request) => _handlers .Select(SelectHandler(request, FraudResult.NonFraud)) .ToList() .First();
static Func <ICheckFraudHandler, FraudResult> SelectHandler(CheckFraudRequest request, Chain <FraudResult> result) => handler => result = ContinueIf(request, result, handler);
Func <Order, FraudResult> CheckFraud(Order current) => other => CheckFraud(CheckFraudRequest.NewRequest(current, other));