|
|
|
|
|
by kasey_junk
4541 days ago
|
|
AnyVal's would probably be sufficient except for the following:
- Instantiation of the MyNewType happens all the time and is not obvious from inspection of the code (generics, use as another type if we implement a trait, etc).
- If we want to call any of the methods on the wrapped type we have to call directly to the wrapped type violating Demeter.
- Verbosity. |
|
You can also use tagged types:
http://eed3si9n.com/learning-scalaz/Tagged+type.html
But most of the methods will untag the type. I.e., ("foo" @@ ValidJsonString).substring(3,7) will be a String, not a String @@ ValidJsonString.