- 値のwrap/unwrapがない
- インスタンスの定義が単純
- インスタンスが一意に定まらない
コンパニオンオブジェクトの同一階層に複数のimplicit valueを定義した場合
- importが必須
- エラーがわかりづらい(could not find implicit value)
importによりコンテキストを切り替えることが本当に良いのか
- インスタンスが一意に決まる
- importが必要ない
- 値のwrapが必要
newtypeの実装候補
- wrapper class
- tagged type
value classは抽象化が不可能である(インスタンス化されてしまう)ため採用できない
wrapper classを使う場合
- インスタンスの定義が簡単
- unwrapが必要
- wrap/unwrapにコストがかかる
tagged typeを使う場合
- wrapのコストがない
- プリミティブ型のboxing/unboxingのコストはある
- 黒魔術的
subtypingを使うtagged type
- unwrapが不要
subtypingを使わないtagged type
- unwrapが必要