Возвращаясь к Scala после написания заклинания Haskell, я начал использовать ключевое слово типа, чтобы сделать мои определения классов более читабельными, например:
type RestfulParams = Map[String, String]
def canonicalize(params: RestfulParams): String = { ... }
Проблема, с которой я столкнулся, заключается в том, что эти определения типов должны жить внутри класса или объекта - они не являются "гражданами первого класса", как в Haskell. Если я попытаюсь определить тип вне класса или объекта, я получаю компилятор expected class or object definition
.
Моя проблема заключается в том, как использовать эти типы для нескольких классов и объектов в пакете? То, что я сделал сейчас, кажется довольно уродливым:
object RestfulTypes { type RestfulParams = Map[String, String] etc }
И затем в другом файле класса:
import utils.{RestfulTypes => RT}
def get(resource: String, params: RT.RestfulParams): String = { ... }
Есть ли лучший способ сделать это - и, кстати, гуру Scala считают, что это хорошо или плохо, что типы могут быть определены только внутри классов/объектов?