public static OrderReport GenerateReportForOrder(
            OrderReportFormattingSettings orderReportFormattingSettings,
            Order order)
        {
            var sb = new MyStringBuilder();

            sb.AppendLine("Order date: " + FormatDate(order.OrderDate));

            if (!orderReportFormattingSettings.DontIncludeNumberOrOrderLines)
            {
                sb.AppendLine("Number of order lines: " + order.OrderLines.Length.AsString());
            }

            decimal total = 0m;

            foreach (var orderLine in order.OrderLines)
            {
                var lineTotal = orderLine.ItemCount * orderLine.ItemPrice;

                total += lineTotal;

                sb.AppendLine(orderLine.ProductName + ": " + orderLine.ItemCount.AsString() + " * " + orderLine.ItemPrice.AsString() + "$ = " + lineTotal.AsString() + "$");
            }

            sb.AppendLine("Total: " + total.AsString() + "$");

            return(new OrderReport(sb.ToString()));
        }
        static void Main(string[] args)
        {
            var orderReportFormattingSettings =
                new OrderReportFormattingSettings(args.Length > 0 && args[0].Equals("noNumberOfLines"));

            var cities = DatabaseModuleFunctions.LoadAllDataWithoutOrders();

            var PureCompose = PureLambda.Create(() =>
            {
                var generateReportForOrder =
                    ReportingModule.GenerateReportForOrder();

                var generateReportForCustomer =
                    ReportingModule.GenerateReportForCustomer()
                    .HonestlyInject(
                        generateReportForOrder);

                var generateReportForCity =
                    ReportingModule.GenerateReportForCity()
                    .HonestlyInject(generateReportForCustomer);

                return(ReportingModule.GenerateReport()
                       .HonestlyInject(generateReportForCity));
            });

            var generateReportHonest = PureCompose();

            var generateReport =
                generateReportHonest
                .PartiallyInvoke(
                    orderReportFormattingSettings,
                    DatabaseModule.LoadOrdersForCustomer());

            var report = generateReport(cities);

            SaveReport(report);
        }