単位付きの数量のサポートが必要です。型システムで単位の正確性を可能な限り強化したいと考えています。たとえば、グラムとドルを組み合わせることはできません。パラメーター化された型の道をたどっていますが、このコードは、他の人から見た Scala コードよりもはるかに反復的であるように見えます。
abstract class UnitOfMeasure
abstract class Range[T] {
type T <: UnitOfMeasure
}
class Quantity[T <: UnitOfMeasure](value: Double)
class DefiniteRange[T<:UnitOfMeasure](lowerBound: Quantity[T], upperBound: Quantity[T]) extends Range[T]
class Confidence(conf: Double) {
require(0.0 <= conf && conf <= 1.0)
}
class ConfidenceInterval[T<:UnitOfMeasure](lowerBound: Quantity[T], upperBound: Quantity[T], confidence: Confidence) extends Range[T] {
def this(lower: Quantity[T], upper: Quantity[T]) = this(lower, upper, new Confidence(.90))
}
これを行うためのよりクリーンな方法はありますか?「T<:UnitOfMeasure」のドラムビートは、私を悩ませている主なものです。