- Adam Granicz (GitHub:granicz, Twitter:@granicz), IntelliFactory
- F# language reference
- Tour of F#
- Syme, D., Granicz. A., Cisternino A. (2017). Expert F# 4.0. 4th Edition. Apress. ISBN 978-1-4842-0741-3.
- Setting up your F# environment
- Formats and tools
- Web programming
- Ways to earn a grade:
- Homework (3x) - 100 points
- Project work (1+1) - 150 points
- Extra credit
- Grade 5 - 225+ points
- Grade 4 - 200+ points
- Grade 3 - 175+ points
- Grade 2 - 150+ points
- Fail - below 150 points
- Assignment #1 - (30 points, due date: Apr 10, 2022).
- Numbers, sequences/lists, mapping/filtering/folding, records, discriminated unions, functions/recursion
- Assignment #2 - (30 points) - TBD
- Assignment #3 - (40 points) - TBD
During the course of the semester, you will work on and complete two larger projects.
-
Mid-term project (50 points, due date: Apr 24, 2022). A web project meant to help you dig deeper into web programming with F#. You can implement more than one project to earn extra credit.
-
Personal project (100 points, due date: last Sunday of the semester) - this is a project you can pick for youself, and it is meant to help you explore F# more fully at your own pace and according to your own interest.
-
Feb 18, 2022 (in-class)
- Chapter 2, Chapter 3 - Functional programming
- Your first F# program - analyzing a string for duplicate words
- Using F# Interactive (FSI/fsi)
- Bindings - using
let
, left-hand-side (LHS) is a pattern - Values and immutability
- Types and signatures
- Type inference and type annotations
- Functions calls
- Scope
- Dot-notation
- Tuples
- Values and objects
- Opening namespaces and modules -
open
- Values, methods, properties
- MSDN - F# reference
- Chapter 2, Chapter 3 - Functional programming
-
Feb 25, 2022 (in-class)
- Expert F# 4 - Chapter 3 - Functional programming
- Basic types and their literals (
bool
,int
,float
,double
,string
,unit
) - Arithmetic operators, using type annotations to drive overload selection
- Converting values
- Basic comparison (
=
,<>
,<
,<=
,>
,>=
,min
,max
) - Strings and their characters
- Conditionals
- Recursive functions
- Lists, Arrays
- Options
- Pattern matching
- Function values, function composition, first-class functions
- MSDN - F# reference
- Discriminated unions
- Active patterns
- Namespaces, nested namespaces
- Modules, nested modules
- Functions, anonymous functions, currying, higher-order functions
- https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/functions/,
- https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/functions/lambda-expressions-the-fun-keyword
- Recurive, and mutually recursive functions - https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/functions/recursive-functions-the-rec-keyword
- Basic types and their literals (
- Expert F# 4 - Chapter 3 - Functional programming
-
Mar 4, 2022 - cancelled
-
Mar 11, 2022 (online) - video
- Chapter 4 - Imperative programming
- Mutable records
- Mutable let-bindings
- Reference cells
- Arrays, slicing
- .NET collections - lazy vs eager
- Sequences
- Chapter 5
- Exploring some simple type definitions
- Understanding generics
- Making things generic
- Reference and value types
- MSDN - F# reference
- Chapter 4 - Imperative programming
-
Mar 18, 2022 (online) - video
- WebSharper basics, project templates, getting started
-
Mar 25, 2022 - video
-
Apr 1, 2022 (online) - video
- Reactive programming with WebSharper.UI
- Reactive variables and ListModels
- Two-way binding of UI controls and models
- React vs WebSharper.UI
- Virtual DOM, DOM diffing vs dynamic dataflow
- Reactive programming with WebSharper.UI
-
Apr 8, 2022 (online) - video
- Working with databases (MS SQL Server)
- MS SQL Server
- MS SQL Server Management Studio
- Creating databases
- Creating tables
- Primary keys - GUID vs auto-incremented int, uniqueness constraint
- Foreign keys - foreign key (FK) constraint
- Overview of F# data access
- Key considerations
- .NET Core/net50+ support
- Object-Relational-Mapping (ORM) capabilities
- Queries as F# (computation expressions) vs SQL
- Type-safety vs performance
- Accessing SQL Server - comparison, old but useful
- Key choices
- FSharp.Data.SqlClient
- SQLProvider - issues with net50+
- Dapper.FSharp
- DustyTables
- Key considerations
- Working with databases (MS SQL Server)
-
Apr 13, 2022 - Possible extra day, TBD
-
Apr 15, 2022 - Holiday
-
Apr 22, 2022
-
Apr 29, 2022
-
May 6, 2022