24
Domain Specific Languages The functional Way Tomas Petricek @tomaspetricek | www.fsharpworks.com

Domain Specific Languages: The Functional Way

Embed Size (px)

DESCRIPTION

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.

Citation preview

Page 1: Domain Specific Languages: The Functional Way

Domain Specific Languages

The functional Way

Tomas Petricek@tomaspetricek | www.fsharpworks.com

Page 2: Domain Specific Languages: The Functional Way

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

Page 3: Domain Specific Languages: The Functional Way
Page 4: Domain Specific Languages: The Functional Way

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

Page 5: Domain Specific Languages: The Functional Way

DSL = model + syntax

Page 6: Domain Specific Languages: The Functional Way

COMPOSING 3D OBJECTS

Page 7: Domain Specific Languages: The Functional Way

Domain-specific language approach

Class of problemsConstructing 3D objectsMakefiles, stock price modelling, testing, …

Domain-specific language in F#Primitives – basic building blocksComposition – how to put them together

Page 8: Domain Specific Languages: The Functional Way

http://tomasp.net/blog/2014/puzzling-fsharp/

Page 9: Domain Specific Languages: The Functional Way

GENERATING TEXT DOCUMENTS

Page 10: Domain Specific Languages: The Functional Way

Domain model & Processing

What is a text document? How can we process it?

Page 11: Domain Specific Languages: The Functional Way

BUILDING AN F# DSL

Page 12: Domain Specific Languages: The Functional Way

Operations on documents

Parse Read from Markdown format

Format Generate HTML output

Process Translate to Norwegian!

Page 13: Domain Specific Languages: The Functional Way

PROCESSING DOCUMENTS

Page 14: Domain Specific Languages: The Functional Way

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

Page 15: Domain Specific Languages: The Functional Way

PARSING MARKDOWN

http://manning.com/petricek2

Page 16: Domain Specific Languages: The Functional Way

Processing Markdown

Domain modelUnderstand the problem domain!Using F# discriminated unions

Domain-specific languageInternal – just an F# library!External – parsing Markdown is easy!

Page 17: Domain Specific Languages: The Functional Way

DETECTING PRICE PATTERNS

Page 18: Domain Specific Languages: The Functional Way

Declining pattern

Page 19: Domain Specific Languages: The Functional Way

Rounding top pattern

Page 20: Domain Specific Languages: The Functional Way

Multiple bottom pattern

Page 21: Domain Specific Languages: The Functional Way

Functional DSL style

Primitive classifiersDeclining priceRising price

Composing classifiersSequence and parallel patternsLinear regression

Page 22: Domain Specific Languages: The Functional Way

DETECTING PRICE PATTERNS

Page 23: Domain Specific Languages: The Functional Way

Summary

Page 24: Domain Specific Languages: The Functional Way

❶ Understand problem domain Primitives & Combinators

❷ Model the language using Discriminated Unions

❸ Add convenient Syntax Internal or External

[email protected] | @tomaspetricek | http://fsharpworks.com