scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April...

46
scalaz get functional Tuesday, April 12, 2011

Transcript of scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April...

Page 1: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

scalazget functional

Tuesday, April 12, 2011

Page 2: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

import Predef._

Tuesday, April 12, 2011

Page 3: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

scalaz is...

Tuesday, April 12, 2011

Page 4: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

scalaz is

a library to support functional programming in Scala.

Tuesday, April 12, 2011

Page 5: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

functional programming is...

Tuesday, April 12, 2011

Page 6: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

functional programming is

programming with functions

Tuesday, April 12, 2011

Page 7: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

a program is...

Tuesday, April 12, 2011

Page 8: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

a program is

a single, referentially transparent expression

Tuesday, April 12, 2011

Page 9: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

an expression is...

Tuesday, April 12, 2011

Page 10: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

an expression is

a combination of sub expressions, using the constructs of a language. It evaluates to a result.

Tuesday, April 12, 2011

Page 11: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

a referentially transparent expression...

Tuesday, April 12, 2011

Page 12: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

any occurrence of

a referentially transparent expression

within a program could be replaced by its result, without changing the meaning of the program

Tuesday, April 12, 2011

Page 13: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

a function is...

Tuesday, April 12, 2011

Page 14: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

a function f: A => B is

a relation between every value of type A to exactly one value of type B.

and nothing else, no side effects!

(otherwise, function calls are not RT)

Tuesday, April 12, 2011

Page 15: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

a type is...

Tuesday, April 12, 2011

Page 16: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

a type is

a set of values

Tuesday, April 12, 2011

Page 17: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

side effects are...

Tuesday, April 12, 2011

Page 18: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

EVIL!

Tuesday, April 12, 2011

Page 19: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

for example,

side effects are

• I/O to disk, console, network

• mutating fields or data structures

• throwing exceptions

Tuesday, April 12, 2011

Page 20: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

functional programming

is sometimes called

expression oriented programming

Tuesday, April 12, 2011

Page 21: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

functions are the glue to build programs out of smaller programs.

Tuesday, April 12, 2011

Page 22: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

Why FP?

Tuesday, April 12, 2011

Page 23: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

Modularity

The degree to which the parts can be separated and recombined.

Compositionality

Understand the parts, and the connections, and you understand the whole.

Tuesday, April 12, 2011

Page 24: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

FP in Insert Lang Here

FP is possible in any language

(with differing degrees of difficulty)

Tuesday, April 12, 2011

Page 25: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

Tuesday, April 12, 2011

Page 26: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

FP in Scala

no statements, just expressions

Tuesday, April 12, 2011

Page 27: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

FP in Scala

function literals

functions are values

higher-order functions

Tuesday, April 12, 2011

Page 28: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

FP in Scala

algebraic data types (sort of)

Tuesday, April 12, 2011

Page 29: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

FP in Scala

type parametric polymorphism

Tuesday, April 12, 2011

Page 30: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

FP in Scala

implicit parameters for ad-hoc polymorphism

(aka type classes)

Tuesday, April 12, 2011

Page 31: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

FP in Scala

Expressive type system

Type Inference

Type Constructor Polymorphism

Tuesday, April 12, 2011

Page 32: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

FP in Scala: What’s hard?

no side effect tracking (up to you!)

lazy evaluation tricky

subtyping a hinderance

temptation of mutable vars, data structures

Tuesday, April 12, 2011

Page 33: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

scalaz

• Open-source library for pure functional programming

• Version 5.0 stable; 6.0 imminent

http://scalaz.googlecode.com

http://github.com/scalaz/scalaz

Tuesday, April 12, 2011

Page 34: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

scalaz

• Type Classes + Instances

• Pure Functional Data Structures

• General Functions

• Pimps

• Concurrency: Actors / Promise

Tuesday, April 12, 2011

Page 35: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

Getting started...

Imports data types, functions, and necessary implicit conversions

Tuesday, April 12, 2011

Page 36: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

Type Class

• Polymorphism independent of subtyping

• c.f. Comparable / Comparator

• Parametric polymorphism + constraints

• Compile time, implicit, constraint checks

• implicit members declare a type class instance...

• ... and implicit parameters express a constraint.

Tuesday, April 12, 2011

Page 37: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

Type Class + Instance

Tuesday, April 12, 2011

Page 38: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

Pure Functor

Pointed

Bind

Apply

Applicative

Zero Semigroup

Monoid

Equal Show

Order

Monad

InvariantFunctor

Plus Empty

Traverse

Foldable

and a few more...

Tuesday, April 12, 2011

Page 39: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

Writing Type Class Instances

Tuesday, April 12, 2011

Page 40: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

delegate to Any#{toString, ==}

Tuesday, April 12, 2011

Page 41: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

Tuesday, April 12, 2011

Page 42: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

Pimps

Tuesday, April 12, 2011

Page 43: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

Pimps + Type Classes

Require Type Class

OO SyntaxAd hoc

Polymorphism

Tuesday, April 12, 2011

Page 44: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

Behind the Scenes

Tuesday, April 12, 2011

Page 45: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

Data Structures

• Zipper

• Tree / TreeLoc

• NonEmptyList

• FingerTree / Rope

• State

• Validation

Tuesday, April 12, 2011

Page 46: scalaz - files.meetup.com · a library to support functional programming in Scala. Tuesday, April 12, 2011. functional programming is... Tuesday, April 12, 2011. ... FP in Scala function

I’m sure we’re out of time

Questions are always welcome:

• scalaz google group

• #scalaz on freenode

Tuesday, April 12, 2011