Domain Specific Languages
The functional Way
Tomas Petricek
@tomaspetricek | www.fsharpworks.com
F# Software
Foundation
http://www.fsharp.org
software stacks
trainings teaching F# user groups snippets
mac and linux comm...
Kaggle
• Interactivity
• Machine learning
• Data processing
GameSys
• Time to Market
• Social Gaming
• Concurrency
Tachyus...
DSL= model + syntax
COMPOSING 3D OBJECTS
Domain-specific language approach
Class of problems
Constructing 3D objects
Makefiles, stock price modelling, testing, …
D...
http://tomasp.net/blog/2014/puzzling-fsharp/
GENERATING TEXT DOCUMENTS
Domain model & Processing
What is a text document?
How can we process it?
BUILDING AN F# DSL
Operations on documents
Parse Read from Markdown format
Format Generate HTML output
Process Translate to Norwegian!
PROCESSING DOCUMENTS
DSL for writing documents
Creating DSLs with F#
=====================
Key components of a DSL:
* **Model** describes the
s...
PARSING MARKDOWN
http://manning.com/petricek2
Processing Markdown
Domain model
Understand the problem domain!
Using F# discriminated unions
Domain-specific language
Int...
DETECTING PRICE PATTERNS
Declining pattern
Rounding top pattern
Multiple bottom pattern
Functional DSL style
Primitive classifiers
Declining price
Rising price
Composing classifiers
Sequence and parallel patter...
DETECTING PRICE PATTERNS
Summary
❶ Understand problem domain
Primitives & Combinators
❷ Model the language using
Discriminated Unions
❸ Add convenient Synt...
Domain Specific Languages: The Functional Way
Upcoming SlideShare
Loading in …5
×

Domain Specific Languages: The Functional Way

2,367 views

Published on

In software development, we often face the same problem over and over again. For example, when designing user-interfaces, we need to specify the layout of components; when designing financial systems, we need to detect various patterns in changing prices. The Domain Specific Language (DSL) approach is to design a language for the specific problem domain and then use it repeatedly to solve multiple instances of the same problem.

In this talk, we look how to think about DSLs in a functional way. This lets us focus on the domain. Rather than worrying about the syntax, we start by understanding what problems we actually want to model and what is the best way to do so. Along the way, we’ll look at three fun examples ranging from a language for building 3D objects to a language for detecting price change patterns.

Published in: Technology, Education
  • Be the first to comment

Domain Specific Languages: The Functional Way

  1. 1. Domain Specific Languages The functional Way Tomas Petricek @tomaspetricek | www.fsharpworks.com
  2. 2. F# Software Foundation http://www.fsharp.org software stacks trainings teaching F# user groups snippets mac and linux community books and tutorials consulting open-source MonoDevelop contributions research support cross-platform mailing lists
  3. 3. Kaggle • Interactivity • Machine learning • Data processing GameSys • Time to Market • Social Gaming • Concurrency Tachyus • Analysis & reporting • Time to market • Oil & gas startup Credit Suisse • Complexity • Financial models • DSLs
  4. 4. DSL= model + syntax
  5. 5. COMPOSING 3D OBJECTS
  6. 6. Domain-specific language approach Class of problems Constructing 3D objects Makefiles, stock price modelling, testing, … Domain-specific language in F# Primitives – basic building blocks Composition – how to put them together
  7. 7. http://tomasp.net/blog/2014/puzzling-fsharp/
  8. 8. GENERATING TEXT DOCUMENTS
  9. 9. Domain model & Processing What is a text document? How can we process it?
  10. 10. BUILDING AN F# DSL
  11. 11. Operations on documents Parse Read from Markdown format Format Generate HTML output Process Translate to Norwegian!
  12. 12. PROCESSING DOCUMENTS
  13. 13. DSL for writing documents Creating DSLs with F# ===================== Key components of a DSL: * **Model** describes the structure of the domain that we are modelling * **Syntax** provides an easy way for solving problems using the DSL Creating DSLs with F# Key components of a DSL: • Model describes the structure of the domain that we are modelling • Syntax provides an easy way for solving problems using the DSL
  14. 14. PARSING MARKDOWN http://manning.com/petricek2
  15. 15. Processing Markdown Domain model Understand the problem domain! Using F# discriminated unions Domain-specific language Internal – just an F# library! External – parsing Markdown is easy!
  16. 16. DETECTING PRICE PATTERNS
  17. 17. Declining pattern
  18. 18. Rounding top pattern
  19. 19. Multiple bottom pattern
  20. 20. Functional DSL style Primitive classifiers Declining price Rising price Composing classifiers Sequence and parallel patterns Linear regression
  21. 21. DETECTING PRICE PATTERNS
  22. 22. Summary
  23. 23. ❶ Understand problem domain Primitives & Combinators ❷ Model the language using Discriminated Unions ❸ Add convenient Syntax Internal or External tomas@tomasp.net | @tomaspetricek |

×