У вас есть хороший источник в книге MEAP (Early Access)
DSL в действии от Debasish Ghosh (блог: «Ruminations of a programmer)
Тестовые фреймворки, такие как scalatest, являются классическими примерами DSL:
test("pop is invoked on an empty stack") {
val emptyStack = new Stack[String]
evaluating { emptyStack.pop() } should produce [NoSuchElementException]
emptyStack should be ('empty)
}
Существует много других ФРЕЙМВОРКОВ на основе DSL:
specs: "Behavior-Driven-Design framework"
Squeryl: "Scala ORM и DSL для общения с базами данных с минимальной детализацией и максимальной безопасностью типа"
def songCountByArtistId: Query[GroupWithMeasures[Long,Long]] = from(artists, songs)((a,s) => where(a.id === s.artistId) groupBy(a.id) compute(count) )
lift-json предоставляет DSL для генерации JSON. Например, следующий DSL:
("person" ->
("name" -> "Joe") ~
("age" -> 35) ~
("spouse" ->
("person" ->
("name" -> "Marilyn") ~
("age" -> 33)
)
)
)
создает следующий JSON:
{
"person": {
"name": "Joe",
"age": 35,
"spouse": {
"person": {
"name": "Marilyn",
"age": 33
}
}
}
}
Два хороших примера - встроенные DSL для парсерных комбинаторов и акторов. Существует обертка для SQL под названием DBC (еще не готова), здесь вы можете увидеть, как она выглядит: http://scala.sygneca.com/libs/dbc
В статье ScalaQL (PDF) описывается реализация интересного DSL для интегрированных в язык запросов к базе данных.
ScalaModules - это DSL для работы с OSGi .
Еще один доступен с Apache Camel , платформой для корпоративной интеграции.
Scala-Query и Squeryl , помимо прочего, также предоставляют DSL для запросов к базам данных.
ScalaTest также является прекрасным примером того, что возможно.