dsls with fold algebras

31
Writing a DSL with a Fold-Algebra ScalaSyd

Upload: eric-torreborre

Post on 27-Nov-2014

440 views

Category:

Software


2 download

DESCRIPTION

This presentation shows how to use "fold algebras" to implement a toy DSL for paths

TRANSCRIPT

Page 1: DSLs with fold algebras

Writing a DSL with a Fold-Algebra

ScalaSyd

Page 2: DSLs with fold algebras

Overview

Fold-algebras

File paths

DSLs tips and tricks

The expression problem

Scala types

Page 3: DSLs with fold algebras

I’ve had this problem

Result

Failure Success Pending

Console Html

Screenshot?

Pdf?

Page 4: DSLs with fold algebras

The Expression Problem

Add(Lit(1), Lit(2))

Page 5: DSLs with fold algebras

The Expression Problem

Page 6: DSLs with fold algebras

The Expression Problem

Page 7: DSLs with fold algebras

Solved in Java?!?

Page 8: DSLs with fold algebras

Data as an ADT

Page 9: DSLs with fold algebras

List as a “fold”

Page 10: DSLs with fold algebras

List as a “fold”

foldRight

or foldLeft?

then map, filter,

flatMap,…

Page 11: DSLs with fold algebras

Data types encodings

Fold-

Algebra

(Nil -> A, (A, List[A]) -> A)

F-Algebra

Nil + (A, List[A]) -> A F[A] -> A

List[A] = Nil + (A, List[A])

Page 12: DSLs with fold algebras

A Fold-algebra for directories

Name Name Name Name

Page 13: DSLs with fold algebras

A Fold-algebra for directories

return an object

doing what you

want!

Page 14: DSLs with fold algebras

A DSL for directories

Create

directorie

s?

Page 15: DSLs with fold algebras

What’s in a name?

this is

obviously

correct

Page 16: DSLs with fold algebras

What’s in a name?

With

macros!

Page 17: DSLs with fold algebras

A DSL for directories

Derived

methods

Page 18: DSLs with fold algebras

A DSL for directories

Implicit

class

Page 19: DSLs with fold algebras

A DSL for directories

What about files?

Page 20: DSLs with fold algebras

A Fold-algebra for files

Extend!

Page 21: DSLs with fold algebras

A DSL for files

Page 22: DSLs with fold algebras

A DSL for files

What about absolute,

relative paths?

Page 23: DSLs with fold algebras

A Fold-algebra for paths

Poor Man’s e

num

Page 24: DSLs with fold algebras

A Fold-algebra for paths

Type member

Page 25: DSLs with fold algebras

A DSL for relative paths

Singleton

type

Page 26: DSLs with fold algebras

A DSL for relative paths

Page 27: DSLs with fold algebras

A DSL for relative paths

Type alias

“Conform”

type

Page 28: DSLs with fold algebras

A DSL for relative paths

Path-dependent

type

Page 29: DSLs with fold algebras

A DSL for relative paths

Path-dependent

type

Page 30: DSLs with fold algebras

A DSL for relative paths

Page 31: DSLs with fold algebras

Conclusion

Play!Papers!

Present at !

Ps3