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));