Talbott Crowell introduces F# 3.0 including function programming basics, units of measure, and the new F# 3.0 feature called Type Providers for analyzing Big Data
1. Introduction to F# 3.0
Talbott Crowell, MVP
@talbott
#BOSCC
Boston Code Camp
October 20, 2012
2. What is F#
Statically typed, open source
functional programming
language
that uses type inferencing
Unique features:
Units of Measure
Type Providers
3. Static versus Dynamic
F# is statically typed like:
C++, Objective-C, Java, Scala
Compared to dynamically typed
languages:
Python, JavaScript, Erlang, MATLAB
4. Open Source
Apache 2.0 license
Free IDE on Windows from Microsoft
Free IDE on Mac (MonoDevelop)
http://blogs.msdn.com/b/fsharpteam/archive/2012/09/24/announcing-the-f-3-0-open-source-code-drop.aspx
5. Functional Programming
(FP)
Examples of FP languages
Erlang, Haskell,
Clojure and Scala (JVM)
Functions are first class citizens
like variables in imperative languages
Higher-order functions
functions a parameters or return values
6. Type Inferencing
let x = 5
let y = "hello"
let z = new Form()
let distance = 26.21875<mile>
let f x = x + x
7. Immutable by default
let x = 5
let mutable y = 7
y <- 8
let z = new Form()
z.Show()
z.Text <- “Hello”
8. Array, List, and Seq
Arrays are mutable
Lists are not
Seq (sequences) only store one
value at a time (lazy)
9. Array, List, and Seq
let set1 = [|1..10|]
let set2 = [1..10]
let set3 = seq { 1..10 }
set1.[0] <- 999 //mutable
10. Units of Measure
Floating point and signed integer
values in F# can have associated
units of measure, which are typically
used to indicate
length, volume, mass, and so on.
By using quantities with units, you
enable the compiler to verify that
arithmetic relationships have the
correct units, which helps prevent
programming errors.
11. Units of Measure
[<Measure>] type mile
[<Measure>] type km
let distance1 = 4.0<mile>
let distance2 = 3.0<km>
//compile error
let total = distance1 + distance2
12. Units of Measure
[<Measure>] type mile
[<Measure>] type km
let convert_mile2km (a : float<mile>) =
a / 0.621371<mile/km>
let distance1 = 4.0<mile>
let distance1a = convert_mile2km distance1
let distance2 = 3.0<km>
let total = distance1a + distance2
13. Type Providers
F# 3.0 introduces
Type Providers
Data rich programming
for the Big Data Era
Enables
massive schemas
with strict typing
14. Examples of Type Providers
SQL Data Connection
OData Service Provider (Netflix)
Freebase
Hadoop
R
WMI
RegEx