I've seen BASIC and Apache Camel DSLs in Scala, and they're just fantastic. Any more examples of such DSLs?
You have a good source in the MEAP (Early Access) book
DSL in action from Debasish Ghosh (blog: "Ruminations of a programmer)
Testing frameworks like scalatest are classic examples of DSL:
test("pop is invoked on an empty stack") {
val emptyStack = new Stack[String]
evaluating { emptyStack.pop() } should produce [NoSuchElementException]
emptyStack should be ('empty)
}
There are many others DSL-based frameworks out there:
specs: "Behaviour-Driven-Design framework"
internal DSLs
Squeryl: "A Scala ORM and DSL for talking with Databases with minimum verbosity and maximum type safety"
def songCountByArtistId: Query[GroupWithMeasures[Long,Long]] = from(artists, songs)((a,s) => where(a.id === s.artistId) groupBy(a.id) compute(count) )
lift-json provides a DSL to generate JSON. For example the following DSL:
("person" ->
("name" -> "Joe") ~
("age" -> 35) ~
("spouse" ->
("person" ->
("name" -> "Marilyn") ~
("age" -> 33)
)
)
)
creates the following JSON:
{
"person": {
"name": "Joe",
"age": 35,
"spouse": {
"person": {
"name": "Marilyn",
"age": 33
}
}
}
}
ScalaModules is a DSL for working with OSGi.
Another one is available with Apache Camel a platform for enterprise integration.
Scala-Query and Squeryl also provide DSLs for querying databases among other things.
ScalaTest is also an awesome example of what is possible.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With