我最近开始在 F# 中使用 Units Of Measure,并认为我可以编写一个非常简单的示例来计算给定增值税率和净总额的总金额。
例如:
净额可能等于 600.00 增值税税率为 20%,总金额应为 720.00
我有以下类型
[<Measure>] type net
[<Measure>] type vatRate
[<Measure>] type vatValue = net * vatRate
[<Measure>] type gross
以及以下功能
let calculateVat (netValue : float<net>) (vat : float<vatRate>) = netValue * vat
let calculateGross (netValue : float<net>) (vat : float<vatValue>) = netValue + vat
通过以下测试:
let calcVatTest = calculateVat 600.00<net> 0.2<vatRate> = 120.00<vatValue>
let calcGrossTest = calculateGross 600.00<net> 120.00<vatValue> = 720.00<gross>
我遇到的问题是我无法获得 calculateGross 函数的正确语法,并且出现编译错误:“计量单位 'vatValue' 与计量单位 'net' 不匹配”
似乎我需要定义与以下类似的总:
[<Measure>] type gross = net + vatValue
但是编译器不喜欢 +
任何想法我可以如何实现这一目标?
谢谢