public CalculatedProductDto Calculate(string name, int upc, decimal productPrice, int tax, int?universalDiscount, UpcDiscountDto upcDiscount)
        {
            var universalDiscountOption = universalDiscount.HasValue
                                                    ? FSharpOption <PriceCalculations.Discount> .Some(PriceCalculations.Discount.NewDiscount(universalDiscount.Value))
                                                    : FSharpOption <PriceCalculations.Discount> .None;

            var upcDiscountOption = upcDiscount != null
                                                    ? FSharpOption <PriceCalculations.UpcDiscount> .Some(new PriceCalculations.UpcDiscount(
                                                                                                             PriceCalculations.Discount.NewDiscount(upcDiscount.Discount),
                                                                                                             ProductUpc.NewProductUpc(upcDiscount.Upc)))
                                                    : FSharpOption <PriceCalculations.UpcDiscount> .None;

            Say.hello("from Say module");
            var pr = new Product(
                ProductName.NewProductName(name),
                ProductUpc.NewProductUpc(upc),
                ProductPriceModule.create(productPrice));
            var priceCalculationDto = PriceCalculations.calculatePrice(
                PriceCalculations.Tax.NewTax(tax),
                universalDiscountOption,
                upcDiscountOption,
                pr);

            return(new CalculatedProductDto(priceCalculationDto.upc.Item,
                                            name,
                                            ProductPriceModule.value(priceCalculationDto.basePrice),
                                            ProductPriceModule.value(priceCalculationDto.taxAmount),
                                            FSharpOption <ProductPrice> .get_IsSome(priceCalculationDto.universalDiscountAmount)
                                                ? ProductPriceModule.value(priceCalculationDto.universalDiscountAmount.Value) as decimal?
                                                : null,
                                            FSharpOption <ProductPrice> .get_IsSome(priceCalculationDto.upcDiscountAmount)
                                                ? ProductPriceModule.value(priceCalculationDto.upcDiscountAmount.Value) as decimal?
                                                : null,
                                            FSharpOption <ProductPrice> .get_IsSome(priceCalculationDto.totalDiscountAmount)
                                                ? ProductPriceModule.value(priceCalculationDto.totalDiscountAmount.Value) as decimal?
                                                : null,
                                            ProductPriceModule.value(priceCalculationDto.calculatedPrice)));
        }