F# MENTORSHIP PROGRAME FSHARP.ORG/MENTORSHIP UNFRYING YOUR BRAIN - - PowerPoint PPT Presentation

f mentorship programe fsharp org mentorship unfrying your
SMART_READER_LITE
LIVE PREVIEW

F# MENTORSHIP PROGRAME FSHARP.ORG/MENTORSHIP UNFRYING YOUR BRAIN - - PowerPoint PPT Presentation

F# MENTORSHIP PROGRAME FSHARP.ORG/MENTORSHIP UNFRYING YOUR BRAIN WITH F# QCON LONDON - MARCH 2016 KILLING DEMONS FOR FUN AND PROFIT OBVIOUS CODE IS GOOD CODE. F# IS A GENERAL PURPOSE LANGUAGE. INTEROP 1: type Order = 2: | GoldOrder 3: |


slide-1
SLIDE 1
slide-2
SLIDE 2
slide-3
SLIDE 3

F# MENTORSHIP PROGRAME

slide-4
SLIDE 4

FSHARP.ORG/MENTORSHIP

slide-5
SLIDE 5

UNFRYING YOUR BRAIN WITH F#

QCON LONDON - MARCH 2016

slide-6
SLIDE 6

KILLING DEMONS FOR FUN AND PROFIT

slide-7
SLIDE 7

OBVIOUS CODE IS GOOD CODE.

slide-8
SLIDE 8

F# IS A GENERAL PURPOSE LANGUAGE.

slide-9
SLIDE 9
slide-10
SLIDE 10

INTEROP

1: 2: 3: 4: 5: 6: 7: 8: type Order = | GoldOrder | PlatinumOrder of string member this.OrderInfo = match this with | GoldOrder -> "" | PlatinumOrder(extraInfo ) -> "A foamy latte"

slide-11
SLIDE 11

PATTERN MATCHING

1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: let openFile (filePath) = match filePath with | path when Path.GetExtension(path) = ".txt" || Path.GetExtension(path) = ".md" ->

  • penText path

| path when Path.GetExtension(path) = ".jpg" || Path.GetExtension(path) = ".png" || Path.GetExtension(path) = ".gif" -> openText path | _ -> "oh noes"

slide-12
SLIDE 12

TOO MANY WHEN GUARDS

slide-13
SLIDE 13

ACTIVE PATTERNS

1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: let (|Extension|) (path: string) = Path.GetExtension <| path.ToLower() let openFile' path = match path with | Extension ".png" | Extension ".jpg" | Extension ".gif" -> openPictures path | Extension ".txt" | Extension ".md" -> openText path | _ -> "oh noes"

slide-14
SLIDE 14

(| BANNANA OPERATOR |)

slide-15
SLIDE 15

ACTIVE PATTERNS

Use them outside of a match expression Pass parameters Nest them and combine them Should not be expensive or cause side effects.

slide-16
SLIDE 16
slide-17
SLIDE 17

TYPE PROVIDERS

slide-18
SLIDE 18

1: 2: 3: 4: 5: type GiphyTP = JsonProvider<"http://api.giphy.com/API/link" let query = ["api_key", key; "q", searchTerm] let response = Http.RequestString (baseUrl, query) let giphy = GiphyTP.Parse(response)

slide-19
SLIDE 19

ASYNCHRONOUS WORKFLOWS

slide-20
SLIDE 20

1: 2: 3: 4: 5: 6: 7: 8: let getHtml(url:string) = let req = WebRequest.Create url let response = req.GetResponse() use streatm = response.GetResponseStream() use reader = new StreamReader(streatm) reader.ReadToEnd().Length

slide-21
SLIDE 21

1: 2: 3: 4: 5: 6: 7: 8: let getHtmlA(url:string) = async{ let req = WebRequest.Create url let! response = req.AsyncGetResponse() // ding! use streatm = response.GetResponseStream() use reader = new StreamReader(streatm) return reader.ReadToEndAsync().Length // ding! }

slide-22
SLIDE 22

1: 2: 3: 4: sites |> List.map (getHtmlAsync) |> Async.Parallel |> Async.RunSynchronously

slide-23
SLIDE 23

COMPUTATION EXPRESSIONS

slide-24
SLIDE 24

FAMILIAR

slide-25
SLIDE 25
slide-26
SLIDE 26
slide-27
SLIDE 27

1: 2: 3: 4: 5: 6: 7: 8: 9: 10: let division a b c d = match b with | 0 -> None | _ -> match c with | 0 -> None | _ -> match d with | 0 -> None | _ -> Some(((a / b) / c) / d)

slide-28
SLIDE 28

1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: let divide a b = match b with | 0 -> None | _ -> Some(a / b) type MaybeBuilder() = member __.Bind(value, func) = match value with | Some value -> func value | None -> None member __.Return value = Some value member __.ReturnFrom value = __.Bind(value, __.Return

slide-29
SLIDE 29

COMPILER SERIVICES

slide-30
SLIDE 30

SEPARATE HOW TO DEAL WITH DATA, FROM WHAT THE DATA DOES

slide-31
SLIDE 31

ENJOY DYNAMIC LIKE FEATURES WITH TYPE SAFETY

slide-32
SLIDE 32

EASE YOUR WAY INTO ASYNCHRONOUS CODE

slide-33
SLIDE 33

WHEN YOU NEED TO DO SOMETHING DIFICULT SHOW THE RIGHT PATTERNS WITH FAMILIAR IDIOMS

slide-34
SLIDE 34

MAKE EASY THINGS EASY, AND DIFICULT THINGS POSSIBLE

slide-35
SLIDE 35

@SilverSpoon roundcrisis.com

HTTPS://GITHUB.COM/ANDREA/UNFRYINGYOURBRAIN

slide-36
SLIDE 36

EVENTS AND USER GROUPS

Other user groups about programming languages that have no cats with capes on their logos :D Functional Kats F#unctional Londoners meetup group

slide-37
SLIDE 37

RESOURCES

Extensible Pattern Matching Via a Lightweight Language Extension Active Patterns Series: Pattern Matching- Richard Dalton Interesting active patterns - Luke Using F# active patterns with Linq Denatured proteins rescued by trio of chaperones F# usage survey