Slideshare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our User Agreement and Privacy Policy.

Slideshare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our Privacy Policy and User Agreement for details.

Like this presentation? Why not share!

1,822 views

Published on

Published in:
Technology

No Downloads

Total views

1,822

On SlideShare

0

From Embeds

0

Number of Embeds

31

Shares

0

Downloads

17

Comments

0

Likes

4

No embeds

No notes for slide

- 1. F# for Functional Enthusiasts Jack Fox jackfoxy.com craftyThoughts @foxyjackfox Bibliography jackfoxy.com/Fsharp_functional_enthusiasts_bibliography Sample Code https://gist.github.com/jackfoxy/6679238 https://github.com/jackfoxy/CrockSolution https://github.com/jackfoxy/TestSandbox 2012 annular eclipse observed by the author from Sugarloaf Peak, Lake Shasta
- 2. Type Providers Microsoft.FSharp.Data.TypeProviders DbmlFile EdmxFile ODataService SqlDataConnection SqlEntityConnection WsdlService Fsharpx AppSettings Excel Graph Machine Management Math Regex Xaml Xrm FSharp.Data Apiary Csv Freebase Json WorldBank Xml F# 3.0 Sample Pack DGML Word Csv DataStore Hadoop/Hive/Hdfs HelloWorld Management MiniCvs Xrm Tsunami RSS Reader Start Menu NuGetTypeProvider * S3TypeProvider * FacebookTypeProvider * DocumentTypeProvider * * (samples inside Tsunami) in the wild on Github FunScript R Matlab IKVM (Java) Python PowerShell
- 3. strongly typed ≠ object oriented Typed Clojure project on indiegogo.com
- 4. Parameterized Polymorphism a.k.a. Generics let inline unsigned bitSize (zero : 'a) (one : 'a) = let one' = one + zero let x' = one <<< (bitSize - 1) x' ||| one' bitSize:int -> zero: ^a -> one: ^a -> ^a when ^a : (static member ( + ) : ^a * ^a -> ^a) and ^a : (static member ( <<< ) : ^a * int32 -> ^a) and ^a : (static member ( ||| ) : ^a * ^a -> ^a)
- 5. // Base Type Constraint type Class1<'T when 'T :> System.Exception> … // Interface Type Constraint type Class2<'T when 'T :> System.IComparable> … // Comparison constraint type Class10<'T when 'T : comparison> … // Member constraint with property type Class6<'T when 'T : (member Property1 : int)> … Constraints on Type Definitions
- 6. [<Measure>] type m // Distance, meters. [<Measure>] type mile // Distance, miles. [<Measure>] type s // Time, seconds. [<Measure>] type h // Time, hours. let distance1 = 100.0<m> let distance2 = 250.0<mile> let speedMetersPerSec = distance1 / 10.0<s> // float<m/s> let speedMPH = distance2 / 5.0<h> // float<mile/h> let x = distance1 + distance2 //will not compile Units of Measure Design Time Type Checking
- 7. So far… Type Providers: strongly typed external data Strong typing and type inference Type constraints Units of Measure Next up… Nuts and bolts programming
- 8. Vector Eager Rose Tree
- 9. Vector 54321 Construct Deconstruct Initia l Las t [ ] empt y ; ;
- 10. type JsonValue = | String of string | Number of decimal | Float of float | Object of Map<string, JsonValue> | Array of JsonValue[] | Boolean of bool | Null JSON Parsing Discriminated Union Type from FSharp.Data
- 11. JSON Parsing Demo Crock Solution FSI (REPL) compiles to assembly and executes F# scripts Fseye Triple quoting
- 12. Red Black Tree Balancing Source: https://wiki.rice.edu/confluence/download/attachments/2761212/Okasaki-Red-Black.pdf a b c d b ca d a a b c d b c d a c b d
- 13. Talk about reducing complexity! type 'a t = Node of color * 'a * 'a t * 'a t | Leaf let balance = function | Black, z, Node (Red, y, Node (Red, x, a, b), c), d | Black, z, Node (Red, x, a, Node (Red, y, b, c)), d | Black, x, a, Node (Red, z, Node (Red, y, b, c), d) | Black, x, a, Node (Red, y, b, Node (Red, z, c, d)) -> Node (Red, y, Node (Black, x, a, b), Node (Black, z, c, d)) | x -> Node x Source: http://fsharpnews.blogspot.com/2010/07/f-vs-mathematica-red-black- trees.html
- 14. Computational Expressions One syntactic sugar to rule them all ( monad, monoid, applicative functor ) seq {for n in 1..10 do yield n yield n * 2} seq {for n in 1..10 do yield (n, n * 2)} Sequence Generators
- 15. Computational Expressions Recursive Generators let rec listFiles dir = seq { yield! Directory.GetFiles(dir) for subdir in Directory.GetDirectories(dir) do yield! listFiles subdir } let musicFiles = listFiles "E:music" |> List.ofSeq
- 16. Computational Expressions Query Expressions let htmlPage = query { for content in db.tbContentLib do where (content.companyID.Value > 0 and content.isHtml) join template in db.tbTemplate on (content.templateID.Value = template.templateID) select (content.styleID, template.title, template.body) }
- 17. Computational Expressions Query Expressions (Freebase) let topBooksWithNameContaining (s:string) = query { for book in data.``Arts and Entertainment``.Books.Books do where (book.Name.ApproximatelyMatches s) take 10 select book.Name }
- 18. Async let someBinding = async { let! x = … // asynchronous binding let y = … // synchronous binding let! z = … // another asynchronous binding do! … // asynchronous execution return z // return something (or not) }
- 19. Agents a.k.a. Mailbox Processor Message passing Actor Model Erlang-like processing
- 20. {m}brace Cloud Computing (beta) [<Cloud>] let calculatePi (iterations : bigint) (digits : int) : ICloud<string> = cloud { let! workers = Cloud.GetWorkerCount() let workers = bigint (2 * workers) ... let runWorker iterations = cloud { return monteCarloPiWorker iterations } let! results = ... |> Cloud.Parallel ... return getDigits a b |> ... }
- 21. Quotations let ``Vector<Vector<'T>>, windowSeq``() = test<@ [0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10;] = ([0; 1; 2; 3; 4; 5; 6; 7; 8; 9; ] |> Vector.windowSeq 3 |> Vector.flatten |> List.ofSeq) @>
- 22. Now we’ve seen… ML-style pattern matching Syntactic sugar over common FP abstractions Async and friends Quotations Next: Community-Driven Development Fsharp.org Some “core” projects Dev environments
- 23. Fsharp.org F# Foundation Owns resources relating to F# including: the domain fsharp.org the github.com/fsharp community organization the fsharporg twitter account Seeks to: promote the adoption of F# expand the relevance and importance of F# skills and knowledge expand the range of technologies which can interoperate with F# expand the range of platforms where F# can be used facilitate the ongoing development of F#-related technology and resources
- 24. FAKE DSL implementation of build automation system Full use of F# language Access to any and all libraries Develop with powerful debuggers and IDEs
- 25. Literate Programming FSharp.Formatting
- 26. Funscript Javascript and Single Page Apps JQuery and Javascript DOM APIs TypeScript TypeProvider Mini Web Server
- 27. Websharper Fully composeable client-server web development. #websharper on irc.freenode.net
- 28. GPU Process Alea.cuBase Complete commercial solution to develop highly optimized CUDA accelerated GPU applications from F# quotations by QuantAlea. Advantages of functional composition and rapid prototyping Don’t have a NVIDIA card? Try Brahma.Fsharp F# quotations to OpenCL translation
- 29. Testing Options FsUnit – native F# functional syntax across test tools FsCheck – QuickCheck for F# TickSpec – lightweight, but fully featured Gherkin BDD Canopy – lightweight F# syntax for web-client Selenium testing Unquote – step-by-step F# expression evaluations
- 30. Development Alternatives Tsunami IDE (beta) Visual Studio 2010, 2012, 2013 (free Express edition) Xamarin Studio -- iOS, Android, Mac, Mono, .NET (free edition limits project size) Emacs Vim SublimeText
- 31. IKVM lets Java and .NET Get Along! Java from .NET, .NET from Java JVM bytecode IL instruction native JIT (not a bunch of wrappers) 10+ years of development effort Actively supported Powers Mono Extremely few edge incompatibilities
- 32. Questions? F# Programming http://en.wikibooks.org/wiki/F_Sharp_Programming A Course of F# Study http://jackfoxy.com/a-course-of-fsharp-study A directory of useful pages http://fsharpforfunandprofit.com/site-contents Learning F#

No public clipboards found for this slide

×
### Save the most important slides with Clipping

Clipping is a handy way to collect and organize the most important slides from a presentation. You can keep your great finds in clipboards organized around topics.

Be the first to comment