SlideShare ist ein Scribd-Unternehmen logo
1 von 25
[F#] DEV LIFE’S LITTLE PLEASURES
Natallie Baikevich,
F# enthusiast and financial dev
@lu_a_jalla
WE ARE EVERYWHERE!
THINGS TO CARE ABOUT:

• Correctness

• Efficiency
• Safety

• Conciseness
• Simplicity
Based on true stories

WHEN YOU MEET THE REAL WORLD…
#1. THE SPREADSHEET
How to gain by selling £17mln and buying $10mln?
• Buy $10mln
• Sell £16mln

• Spot Rate = 1.6
• GBP/USD =1.5945
• RGL = 88000
Pretty nice, isn’t it?
#1. THE CODE
let buyAmount, sellAmount = 10000000.0, 16000000.0
let spotRate = sellAmount / buyAmount // 1.6
let exchRate = 1.5945

let rgl amount spotRate exchRate =
amount * (spotRate - exchRate)

rgl sellAmount spotRate exchRate |> printfn "%A"
// 88000.0
UNITS OF MEASURE
[<Measure>] type USD
[<Measure>] type GBP

let buyAmount, sellAmount = 10000000.0<USD>, 16000000.0<GBP>

let spotRate = sellAmount / buyAmount

let exchRate = 1.5945<USD/GBP>

let rgl amount spotRate exchRate =

amount * (spotRate – exchRate)
UNITS OF MEASURE - FIXED
[<Measure>] type USD
[<Measure>] type GBP

let buyAmount, sellAmount = 10000000.0<USD>, 16000000.0<GBP>

let spotRate = buyAmount / sellAmount

let exchRate = 1.5945<USD/GBP>

let rgl amount spotRate exchRate =
amount * (spotRate – exchRate)

// -15512000.0
#2. THE OPPORTUNITIES
The same trick works for yield quotes! Get a 100 times
greater coupon. Or smaller. Whatever.
• 1 = 100%
• 1 % = 100 bp

… Or add <pct> and <bp>.
The copy-paste is still around, so

GO FOR GENERICS!
WHAT MAKES A PROGRAM WRITE ITSELF?
#3. THE BOILERPLATE
DevExpress layouts: Save/Restore
• DockManager:
public void SaveLayoutToStream(Stream stream);
public void RestoreLayoutFromStream(Stream stream);

• Grid:
public void SaveLayoutToStream(Stream stream);
public void RestoreLayoutFromStream(Stream stream);
#4. LOADING STOCK DATA FROM YAHOO
type Price = {

“Oct 10, 2013“

Date: DateTime

parse DateTime

“33.31”

parse float

“33.38”

parse float

…

Open: float

…

High: float
Low: float
Close: float
Volume: float

AdjClose: float option
}
MEET GENERIC RESTRICTIONS
let inline tryParse str =
let mutable res = Unchecked.defaultof<_>
let ok = (^a: (static member TryParse: string * byref< ^a > -> bool) (str, &res))
res

match s.Split ',' with

| [| date; o; h; l; c; v; adj |] ->
Some { Date = tryParse date;
Open = tryParse o;
High = tryParse h;

}
Good and Evil

MUTABILITY / STATE / MORE
#6. JUST CHECKING UPDATES
.NET List [ResizeArray]
foreach(var update in updatesList)
{
doSomethingWith(update);
}

System.InvalidOperationException: Collection was modified; enumeration
operation may not execute.
WHEN CHOOSE WHAT
Immutable

Mutable

• Safe
• Simple to read

• Performance optimizations
(e.g. Dictionary vs Map)

• Efficient data structures:

• Interop

• Check fsharpx
• F# Core extensions (ExtCore)
HOW
• let for values
• types: tuples, records, DUs
• core & community collections and data structures (list, map, set
and more)
Scala

F#

• val

• let

• var

• let mutable
The billion dollar mistake and co

MAKE ILLEGAL STATES UNREPRESENTABLE
(NULL)

We have an Option to avoid nulls!
#8. SEND A MESSAGE
match status with
| Pending ->
| Verified -> doSomething()

Pattern matching &
Discriminated Unions FTW!

FS0025: Incomplete pattern matches on this expression. For example,
the value '(_,Released)’

type Status =
| Pending
| Verified of User
| Released of User * DateTime

match msg with
| text, Verified user ->
Summing up

LET THE COMPILER HELP YOU!
WHAT’S NEXT?
• The big ones: Type Providers

• For those who is crazy about types: F*
Getting Started:

• The F# Software Foundation: http://fsharp.org/
• Try F# in your browser: http://www.tryfsharp.org/
• Snippets: http://www.fssnip.net/

• Join Twitter discussions: #fsharp
QUESTIONS?

Weitere ähnliche Inhalte

Ähnlich wie [F#] Dev Life's Little Pleasures

Verilog Lecture3 hust 2014
Verilog Lecture3 hust 2014Verilog Lecture3 hust 2014
Verilog Lecture3 hust 2014Béo Tú
 
10 Billion a Day, 100 Milliseconds Per: Monitoring Real-Time Bidding at AdRoll
10 Billion a Day, 100 Milliseconds Per: Monitoring Real-Time Bidding at AdRoll10 Billion a Day, 100 Milliseconds Per: Monitoring Real-Time Bidding at AdRoll
10 Billion a Day, 100 Milliseconds Per: Monitoring Real-Time Bidding at AdRollBrian Troutwine
 
The Ring programming language version 1.7 book - Part 10 of 196
The Ring programming language version 1.7 book - Part 10 of 196The Ring programming language version 1.7 book - Part 10 of 196
The Ring programming language version 1.7 book - Part 10 of 196Mahmoud Samir Fayed
 
MySQL Stored Procedures: Building High Performance Web Applications
MySQL Stored Procedures: Building High Performance Web ApplicationsMySQL Stored Procedures: Building High Performance Web Applications
MySQL Stored Procedures: Building High Performance Web ApplicationsOSSCube
 
Robots, Small Molecules & R
Robots, Small Molecules & RRobots, Small Molecules & R
Robots, Small Molecules & RRajarshi Guha
 
Quantitative finance 101
Quantitative finance 101Quantitative finance 101
Quantitative finance 101Martin Froehler
 
Quantitative finance 101
Quantitative finance 101Quantitative finance 101
Quantitative finance 101Martin Froehler
 
The Ring programming language version 1.6 book - Part 9 of 189
The Ring programming language version 1.6 book - Part 9 of 189The Ring programming language version 1.6 book - Part 9 of 189
The Ring programming language version 1.6 book - Part 9 of 189Mahmoud Samir Fayed
 
Testing in the World of Functional Programming
Testing in the World of Functional ProgrammingTesting in the World of Functional Programming
Testing in the World of Functional ProgrammingLuka Jacobowitz
 
Shift-Left Testing: QA in a DevOps World by David Laulusa
Shift-Left Testing: QA in a DevOps World by David LaulusaShift-Left Testing: QA in a DevOps World by David Laulusa
Shift-Left Testing: QA in a DevOps World by David LaulusaQA or the Highway
 
Javascript Memory leaks and Performance & Angular
Javascript Memory leaks and Performance & AngularJavascript Memory leaks and Performance & Angular
Javascript Memory leaks and Performance & AngularErik Guzman
 
SOLID, DRY, SLAP design principles
SOLID, DRY, SLAP design principlesSOLID, DRY, SLAP design principles
SOLID, DRY, SLAP design principlesSergey Karpushin
 
2. overview of c#
2. overview of c#2. overview of c#
2. overview of c#Rohit Rao
 
List Processing in ABAP
List Processing in ABAPList Processing in ABAP
List Processing in ABAPsapdocs. info
 

Ähnlich wie [F#] Dev Life's Little Pleasures (20)

Verilog Lecture3 hust 2014
Verilog Lecture3 hust 2014Verilog Lecture3 hust 2014
Verilog Lecture3 hust 2014
 
Introduction to mysql part 3
Introduction to mysql part 3Introduction to mysql part 3
Introduction to mysql part 3
 
10 Billion a Day, 100 Milliseconds Per: Monitoring Real-Time Bidding at AdRoll
10 Billion a Day, 100 Milliseconds Per: Monitoring Real-Time Bidding at AdRoll10 Billion a Day, 100 Milliseconds Per: Monitoring Real-Time Bidding at AdRoll
10 Billion a Day, 100 Milliseconds Per: Monitoring Real-Time Bidding at AdRoll
 
The Ring programming language version 1.7 book - Part 10 of 196
The Ring programming language version 1.7 book - Part 10 of 196The Ring programming language version 1.7 book - Part 10 of 196
The Ring programming language version 1.7 book - Part 10 of 196
 
MySQL Stored Procedures: Building High Performance Web Applications
MySQL Stored Procedures: Building High Performance Web ApplicationsMySQL Stored Procedures: Building High Performance Web Applications
MySQL Stored Procedures: Building High Performance Web Applications
 
Robots, Small Molecules & R
Robots, Small Molecules & RRobots, Small Molecules & R
Robots, Small Molecules & R
 
Quantitative finance 101
Quantitative finance 101Quantitative finance 101
Quantitative finance 101
 
Quantitative finance 101
Quantitative finance 101Quantitative finance 101
Quantitative finance 101
 
The Ring programming language version 1.6 book - Part 9 of 189
The Ring programming language version 1.6 book - Part 9 of 189The Ring programming language version 1.6 book - Part 9 of 189
The Ring programming language version 1.6 book - Part 9 of 189
 
Array&pointer
Array&pointerArray&pointer
Array&pointer
 
Code optimization
Code optimization Code optimization
Code optimization
 
Code optimization
Code optimization Code optimization
Code optimization
 
Testing in the World of Functional Programming
Testing in the World of Functional ProgrammingTesting in the World of Functional Programming
Testing in the World of Functional Programming
 
Pl sql guide
Pl sql guidePl sql guide
Pl sql guide
 
Shift-Left Testing: QA in a DevOps World by David Laulusa
Shift-Left Testing: QA in a DevOps World by David LaulusaShift-Left Testing: QA in a DevOps World by David Laulusa
Shift-Left Testing: QA in a DevOps World by David Laulusa
 
Javascript Memory leaks and Performance & Angular
Javascript Memory leaks and Performance & AngularJavascript Memory leaks and Performance & Angular
Javascript Memory leaks and Performance & Angular
 
Matlab Workshop Presentation
Matlab Workshop PresentationMatlab Workshop Presentation
Matlab Workshop Presentation
 
SOLID, DRY, SLAP design principles
SOLID, DRY, SLAP design principlesSOLID, DRY, SLAP design principles
SOLID, DRY, SLAP design principles
 
2. overview of c#
2. overview of c#2. overview of c#
2. overview of c#
 
List Processing in ABAP
List Processing in ABAPList Processing in ABAP
List Processing in ABAP
 

Kürzlich hochgeladen

Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 

Kürzlich hochgeladen (20)

Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 

[F#] Dev Life's Little Pleasures

  • 1. [F#] DEV LIFE’S LITTLE PLEASURES Natallie Baikevich, F# enthusiast and financial dev @lu_a_jalla
  • 3. THINGS TO CARE ABOUT: • Correctness • Efficiency • Safety • Conciseness • Simplicity
  • 4. Based on true stories WHEN YOU MEET THE REAL WORLD…
  • 5. #1. THE SPREADSHEET How to gain by selling £17mln and buying $10mln? • Buy $10mln • Sell £16mln • Spot Rate = 1.6 • GBP/USD =1.5945 • RGL = 88000 Pretty nice, isn’t it?
  • 6. #1. THE CODE let buyAmount, sellAmount = 10000000.0, 16000000.0 let spotRate = sellAmount / buyAmount // 1.6 let exchRate = 1.5945 let rgl amount spotRate exchRate = amount * (spotRate - exchRate) rgl sellAmount spotRate exchRate |> printfn "%A" // 88000.0
  • 7. UNITS OF MEASURE [<Measure>] type USD [<Measure>] type GBP let buyAmount, sellAmount = 10000000.0<USD>, 16000000.0<GBP> let spotRate = sellAmount / buyAmount let exchRate = 1.5945<USD/GBP> let rgl amount spotRate exchRate = amount * (spotRate – exchRate)
  • 8. UNITS OF MEASURE - FIXED [<Measure>] type USD [<Measure>] type GBP let buyAmount, sellAmount = 10000000.0<USD>, 16000000.0<GBP> let spotRate = buyAmount / sellAmount let exchRate = 1.5945<USD/GBP> let rgl amount spotRate exchRate = amount * (spotRate – exchRate) // -15512000.0
  • 9. #2. THE OPPORTUNITIES The same trick works for yield quotes! Get a 100 times greater coupon. Or smaller. Whatever. • 1 = 100% • 1 % = 100 bp … Or add <pct> and <bp>.
  • 10. The copy-paste is still around, so GO FOR GENERICS!
  • 11. WHAT MAKES A PROGRAM WRITE ITSELF?
  • 12. #3. THE BOILERPLATE DevExpress layouts: Save/Restore • DockManager: public void SaveLayoutToStream(Stream stream); public void RestoreLayoutFromStream(Stream stream); • Grid: public void SaveLayoutToStream(Stream stream); public void RestoreLayoutFromStream(Stream stream);
  • 13. #4. LOADING STOCK DATA FROM YAHOO type Price = { “Oct 10, 2013“ Date: DateTime parse DateTime “33.31” parse float “33.38” parse float … Open: float … High: float Low: float Close: float Volume: float AdjClose: float option }
  • 14. MEET GENERIC RESTRICTIONS let inline tryParse str = let mutable res = Unchecked.defaultof<_> let ok = (^a: (static member TryParse: string * byref< ^a > -> bool) (str, &res)) res match s.Split ',' with | [| date; o; h; l; c; v; adj |] -> Some { Date = tryParse date; Open = tryParse o; High = tryParse h; }
  • 15. Good and Evil MUTABILITY / STATE / MORE
  • 16.
  • 17. #6. JUST CHECKING UPDATES .NET List [ResizeArray] foreach(var update in updatesList) { doSomethingWith(update); } System.InvalidOperationException: Collection was modified; enumeration operation may not execute.
  • 18. WHEN CHOOSE WHAT Immutable Mutable • Safe • Simple to read • Performance optimizations (e.g. Dictionary vs Map) • Efficient data structures: • Interop • Check fsharpx • F# Core extensions (ExtCore)
  • 19. HOW • let for values • types: tuples, records, DUs • core & community collections and data structures (list, map, set and more) Scala F# • val • let • var • let mutable
  • 20. The billion dollar mistake and co MAKE ILLEGAL STATES UNREPRESENTABLE
  • 21. (NULL) We have an Option to avoid nulls!
  • 22. #8. SEND A MESSAGE match status with | Pending -> | Verified -> doSomething() Pattern matching & Discriminated Unions FTW! FS0025: Incomplete pattern matches on this expression. For example, the value '(_,Released)’ type Status = | Pending | Verified of User | Released of User * DateTime match msg with | text, Verified user ->
  • 23. Summing up LET THE COMPILER HELP YOU!
  • 24. WHAT’S NEXT? • The big ones: Type Providers • For those who is crazy about types: F* Getting Started: • The F# Software Foundation: http://fsharp.org/ • Try F# in your browser: http://www.tryfsharp.org/ • Snippets: http://www.fssnip.net/ • Join Twitter discussions: #fsharp