diff --git a/Programming Languages/F#/readme.md b/Programming Languages/F#/readme.md new file mode 100644 index 00000000..63d9aad2 --- /dev/null +++ b/Programming Languages/F#/readme.md @@ -0,0 +1,802 @@ +# F# + +F# (pronounced F sharp) is a general-purpose, high-level, strongly typed, multi-paradigm programming language that encompasses functional, imperative, and object-oriented programming methods. It is most often used as a cross-platform Common Language Infrastructure (CLI) language on .NET, but can also generate JavaScript and graphics processing unit (GPU) code. +F# is a universal programming language for writing succinct, robust and performant code. + +F# allows you to write uncluttered, self-documenting code, where your focus remains on your problem domain, rather than the details of programming. + +This section is curated collection which provides basic and advanced concepts of F# programming language. + + +## Table of Contents + +- [Tutorials](#tutorials) + - [Introduction](#introduction) + - [F# Basics](#f-basics) + - [F# Conditional](#f-conditional) + - [F# Functions](#f-functions) + - [F# Tuples](#f-tuples) + - [F# Collection types](#f-collection-types) + - [F# Exception Handling](#f-exception-handling) +- [Advanced Functional Programming](#advanced-functional-programming) +- [Object-Oriented Programming in F#](#object-oriented-programming-in-f) +- [Development Tools]() + - [IDE](#ide) + - [Editor](#editor) + - [Compilers](#compilers) +- [ Data Science ](#data-science) +- [App Development](#app-development) +- [Videos](#videos) +- [Courses](#courses) +- [Additional Resources](#additinal-resources) + - [Books](#books) + - [Cheatsheets](#cheatsheets) + - [Websites](#websites) + - [Community](#community) +- [Conclusion](#conclusion) + + + + +### Tutorials +> Comprehensive tutorials covering F# basics and advanced concepts. + +### Introduction + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Resource NameDescription
What is F#?This resource provides an overview of F#, including its purpose and key features.
History and Evolution of F#This article delves into the origins and development of F# as a programming language.
Functional Programming vs. Object-Oriented ProgrammingThis blog post compares functional programming, as exemplified by F#, with object-oriented programming, highlighting their differences and use cases.
F# FeaturesThis resource outlines the features that make F# unique and powerful for developers.
F# ExampleThis page provides a simple example to illustrate basic F# syntax and functionality.
Installing and Setting Up F#This guide offers step-by-step instructions for installing and configuring F# on your system.
+ +### F# Basics + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Resource NameDescription
Basic SyntaxThis resource provides an introduction to the basic syntax of F#, including common patterns and conventions.
Code Structure and ModulesThis article explains how to structure F# code using modules and other organizational constructs.
Primitive Types (int, float, bool, char, string)This page covers the basic data types available in F#, including integers, floats, booleans, characters, and strings.
Unit TypeThis resource explains the unit type in F#, which represents a value that carries no information.
TuplesThis article covers the use of tuples in F#, which are used to store multiple values in a single variable.
Option TypesThis resource explains option types in F#, which are used to represent values that may or may not be present.
F# CastingThis page discusses how to perform type casting and conversions in F#.
F# OperatorsThis resource provides an overview of various operators available in F#, including arithmetic, boolean, and bitwise operators.
F# Arithmetic operatorsThis page focuses on arithmetic operators in F#, detailing how to perform basic mathematical operations.
F# String OperationsThis resource covers various operations that can be performed on strings in F#.
F# Boolean operatorsThis page explains boolean operators in F#, used to perform logical operations.
F# Bitwise operatorsThis resource details bitwise operators in F#, which are used for manipulating individual bits of data.
F# Nullable operatorsThis page covers nullable operators in F#, used to handle nullable values.
F# CommentsThis resource explains how to add comments in F# code to make it more readable and maintainable.
+ +### F# Conditional + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Resource NameDescription
F# if thenThis page explains the basic conditional if-then expression in F#, used to execute code based on a condition.
F# if then elseThis resource covers the if-then-else expression in F#, which allows for more complex conditional logic by providing an alternative block of code to execute when the condition is false.
F# if then elif ladderThis article explains the if-then-elif ladder in F#, used for multiple conditional checks in sequence.
F# Pattern MatchingThis page provides an overview of pattern matching in F#, a powerful feature for checking a value against a pattern and deconstructing data structures.
F# for loopThis resource details the for loop in F#, used to execute a block of code repeatedly for a specified number of times.
F# While loopThis article explains the while loop in F#, used to execute a block of code as long as a specified condition remains true.
+ +### F# Functions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Resource NameDescription
F# functionThis page provides an introduction to defining and using functions in F#, including syntax and examples.
F# CompositionThis resource explains function composition in F#, a technique to combine multiple functions into a single function.
F# lambda expressionThis article covers lambda expressions in F#, which are anonymous functions used for short snippets of code.
F# inline functionThis page explains inline functions in F#, which are functions that are expanded inline where they are used to improve performance.
F# let bindingThis resource details let binding in F#, used to bind values to names.
F# Type AnnotationThis article provides an overview of type annotations in F#, used to explicitly specify the type of a value or function.
F# do bindingsThis page explains do bindings in F#, used to execute expressions that do not return a value.
+ +### F# Tuples + + + + + + + + + + + + + + + + + + + + + + +
Resource NameDescription
F# TuplesIntroduces tuples in F#, explaining their syntax and usage.
F# Accessing TuplesCovers accessing tuple elements in F# using pattern matching.
F# Return multiple valuesExplains how to use tuples in F# to return multiple values from a function.
F# Built in functionDemonstrates accessing elements of tuples in F# using built-in functions.
+ +### F# Collection types + + + + + + + + + + + + + + + + + + + + + + +
Resource NameDescription
F# Collection typesOverview of collection types in F# as provided by Microsoft's official documentation.
F# ListIntroduction to lists in F#, covering their creation, operations, and usage.
F# ArraysExplanation of arrays in F#, including their declaration, initialization, and manipulation.
F# SeqOverview of sequences in F#, their creation, and operations.
+ +### F# Exception Handling + + + + + + + + + + + + + + + + + + + + + + + + + + +
Resource NameDescription
F# Exception HandlingAn overview of exception handling in F#, including how to handle and catch exceptions.
F# Try-With and Try-FinallyExplanation of the try-with and try-finally constructs in F# for exception handling.
F# User Defined ExceptionGuide on defining and using user-defined exceptions in F#.
F# Throwing ExceptionExplanation of throwing exceptions in F# using the failwith keyword.
F# AssertionInformation about assertions in F#, which are used to verify assumptions about the state of the program.
+ +### Advanced Functional Programming +> Advanced topics in functional programming with F#, including generics, records, and discriminated unions. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Resource NameDescription
F# GenericsExplanation of generics in F#, their syntax, and usage for writing reusable code.
F# RecordsIntroduction to records in F#, which are used to group related data together.
F# EnumerationOverview of enumerations in F#, used to define a set of named constants.
F# Reference CellsExplanation of reference cells in F#, mutable storage locations that can be updated.
F# StructuresIntroduction to structures in F#, used to define lightweight objects with value semantics.
F# Discriminated UnionsExplanation of discriminated unions in F#, used to define a type that can hold different types of values.
+ + +### Object-Oriented Programming in F# +> Resources exploring object-oriented programming concepts and techniques in F#. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Resource NameDescription
Classes and ObjectsOverview of classes and objects in F#, including their definition and usage.
Defining ClassesExplanation of how to define classes in F# programming language.
Creating ObjectsGuide on creating objects in F# using object expressions.
F# ConstructorExplanation of constructors in F#, used for initializing objects.
F# Self IdentifierInformation about the self identifier in F#, which represents the current instance of a class or object.
F# StaticExplanation of static members in F#, which belong to the type itself rather than to instances of the type.
Properties and MethodsGuide on defining properties and methods in F# classes.
Inheritance in F#Explanation of inheritance and its implementation in F#.
Implementing InterfacesGuide on implementing interfaces in F# to define a contract for types.
F# Method OverridingExplanation of method overriding in F#, used to provide a specific implementation of a method in a derived class.
F# AbstractionOverview of abstract classes in F#, which cannot be instantiated and are used as base classes for other classes.
+ +### Development Tools +> Tools and utilities for F# development, including IDEs, editors, and compilers. + +### IDE + + + + + + + + + + + + + + + + + + + + + + +
Resource NameDescription
F# PlaygroundMinimal playground for F#. Licensed under GPL 3.0.
Jetbrains RiderCross-Platform .Net IDE with F# support. Proprietary, free for open source projects.
MonoDevelopCross-platform IDE mostly aimed at Mono/.NET developers. Licensed under LGPLv2 and X11/MIT.
Visual StudioIDE from Microsoft with first-class F# support (Windows only). Proprietary.
+ +### Editor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Resource NameDescription
Emacs F# modeF# support in Emacs (including Intellisense and Interactive mode). Licensed under Apache 2.0.
F# BindingsArchive of F# Language Bindings for Open Editors. Licensed under Apache 2.0.
FantomasF# code formatter. Licensed under Apache 2.0.
FSharpLintF# code linter. Licensed under MIT.
FSharpFarF# support for Far Manager. Licensed under BSD-3-Clause.
IonideAtom Editor and Visual Studio Code package suite for cross-platform F# development. Licensed under MIT.
Vim F#F# support for Vim. Licensed under MIT.
neofsharp.vimBasic F# support for (Neo)Vim. Licensed under MIT.
VimSpeakVimSpeak lets you control Vim with your voice using speech recognition. Licensed under MIT.
Visual F# Power ToolsPower commands for F# in Visual Studio. Licensed under Apache 2.0.
fsharp-notebookData Science Notebook for F# interactive. Licensed under MIT.
+ +### Compilers + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Resource NameDescription
F# Compiler ServicesThe F# Compiler, F# Interactive scripting engine, and F# editing services as a component library. Licensed under Apache 2.0.
Fable F# to JavaScript Compiler. Licensed under Apache 2.0.
Fez F# to Erlang compiler. Licensed under MIT.
FSharpThe Open Edition of the F# compiler, core library, and tools. Licensed under Apache 2.0.
FunScript F# to JavaScript compiler with JQuery etc. mappings through a TypeScript type provider. Licensed under Apache 2.0.
Juniper Functional Reactive Programming for the Arduino and other microcontrollers. Licensed under MIT.
Pengines.Client Sandboxed Prolog environment. Licensed under BSD-2-Clause.
Visual F# The Visual F# compiler and tools. Licensed under Apache 2.0.
+ +### Data Science +> Materials related to data science and machine learning using F#, including libraries and frameworks. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Resource NameDescription
DeedleDeedle: Exploratory data library for .NET. Licensed under BSD-2-Clause.
Deep.NetDeep learning library for F#. Provides symbolic model differentiation, automatic differentiation, and compilation to CUDA GPUs. Licensed under Apache 2.0.
DiffSharpDiffSharp is a functional automatic differentiation (AD) library. Licensed under BSD-2-Clause.
FsLabFsLab is a collection of libraries for data-science. It provides a rapid development environment that lets you write advanced analysis with few lines of production-quality code. Licensed under Apache 2.0.
IfSharpF# for Jupyter Notebooks. Licensed under BSD-3-Clause.
m2cgenA CLI tool to transpile trained classic ML models into native F# code with zero dependencies. Licensed under MIT.
Math.NET NumericsMath.NET Numerics aims to provide methods and algorithms for numerical computations in science, engineering, and everyday use. F# specific bindings available. Licensed under MIT.
Math.NET SymbolicsMath.NET Symbolics is a basic open-source computer algebra library for .NET, Silverlight, and Mono written entirely in F#. Licensed under MIT.
SIMDArraySIMD enhanced Array extensions for faster computation. Licensed under MIT.
SynapsesNeural network library in F#. Licensed under MIT.
+ +### App Development +> Resources for developing applications using F# for various platforms and purposes. + + + + + + + + + + + + + + + + + + + + + + +
Resource NameDescription
FsUnityF# Libraries, Tools, and Plugins for the Unity3d Game Engine. Licensed under Unilicense.
GarnetGarnet is a lightweight game composition library for F# with entity-component-system (ECS) and actor-like messaging features. Licensed under MIT.
GodotTutorial on how to use F# with Godot.
Nu Game EngineCross-platform F# 2D game engine built in the functional style. Uses SDL2 and Farseer Physics. Licensed under MIT.
+ +### Videos +> Video tutorials and presentations covering different aspects of F# programming. + + + + + + + + + + + + + + + + + + + + + + + + + + +
Resource NameDescription
Austin F# Meetup Group Recorded PresentationsRecorded presentations from the Austin F# Meetup Group.
Intro to F#Video series providing an introduction to F#.
Fast Dictionary in F#Video series discussing fast dictionary implementation in F#.
F# Chats on performanceVideo series covering discussions on performance in F#.
Topological SortVideo series explaining topological sort in F#.
+ +### Courses +> Online courses and workshops for learning F# programming. + + + + + + + + + + + + + + + + + + + + + + +
Resource NameDescription
Data programming with F#Course on data programming with F# available on Udemy.
F# workshopWorkshop focused on F# programming.
Introduction to F#Online course providing an introduction to F# programming.
Write yourself a scheme in 48 hours using F#Course guiding learners to implement a Scheme interpreter in F#.
+ + +### Additinal Resources +> Additinal Resources that you may consider. + +### Books + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Resource NameDescription
Get Programming with F#: A Guide for .NET DevelopersA guide for .NET developers to learn F# programming.
Functional Programming Using F#Book by Michael R. Hansen on functional programming using F#.
Expert F#Written by Don Syme, this book is for advanced F# developers.
Domain Modeling Made Functional: Tackle Software Complexity with Domain-Driven Design and F#Learn domain-driven design and functional programming with F#.
Expert F# 4.0Another expert-level book on F# by Don Syme.
Real-World Functional Programming: With Examples in F#Explore real-world examples of functional programming using F#.
The Book of F#: Breaking Free with Managed Functional ProgrammingLearn managed functional programming with F# in this book by Dave Fancher.
Stylish F# 6: Crafting Elegant Functional Code for .NET 6This book focuses on crafting elegant functional code for .NET 6 using F#.
Beginning F#Introduction to F# programming by Robert. Pickering.
F# for ScientistsThis book focuses on using F# for scientific computing.
+ + +### Cheatsheets + + + + + + + + + + + + + + + + + + + + + + +
Resource NameDescription
F# cheatsheetOfficial F# cheatsheet providing quick reference to F# syntax and features.
F# SnipsCollection of F# code snippets for learning and reference purposes.
F# tourMicrosoft's F# tour providing an overview of F# features and capabilities.
Learn F# in Y minutesQuick F# tutorial to get started with F# programming language.
+ +### Websites + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Resource NameDescription
Community for F#Links to dojos and recordings of community presentations.
cs2fsTransform C# code to F# code.
Decompiler.comOnline C#/VB/F# decompiler.
DotNetFiddleOnline REPL.
F# Core EngineeringOfficial website for F# Core Engineering.
F# for Fun and ProfitReference tutorials for learning F#.
F# Software FoundationMain website for the F# Software Foundation.
fantomas-toolsA set of Fantomas related tools like AST viewer and online bug reporter.
SharpLabC#/VB/F# compiler playground.
Try F#Online tutorials, currently without execution of code due to Silverlight dependency.
+ + +### Community + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Resource NameDescription
F# on DiscourseOfficial F# community forum hosted on Discourse.
F# on GithubOfficial F# repositories and projects on GitHub.
F# on IRCJoin the F# community on IRC.
F# on SlackJoin the F# community on Slack.
F# news on TelegramStay updated with F# news on Telegram.
+ + +## Conclusion + +F# is a powerful and versatile programming language that combines the elegance of functional programming with the practicality of .NET development. Whether you're a beginner learning the basics or an experienced developer exploring advanced concepts, the resources compiled in this README provide a comprehensive guide to mastering F#. + + From tutorials and videos to books and community forums, there's something here for everyone interested in unlocking the full potential of F#. So dive in, explore, and join the vibrant community of F# enthusiasts as you embark on your journey to becoming a proficient F# developer. + + +Happy coding !! \ No newline at end of file