I use dynamic types. In general they are used for interactions with an external (non-code) environment.
One use case is localization. See my
simple messages library for an example. You may find usage examples under the
test directory. This removes almost all boilerplate code used in the formatting.
Another set of use cases is data input from external formats. I have similar libraries for reading json, xml, SQL ResultSets, properties files (application configuration). Main purpose in the same as above: to reduce boilerplate code. I use code like this:
In that example there is a bunch of implicit and explicit conversions from DynamicTypeValue to any required type (Int, Long,
String, Option[Something], Array[Something], etc...).
Same approach (dynamic with selectDynamic and set of conversions) is used for other mentioned readers like JSONInput.