Extending C# with a Library of Functional Programming Concepts
Knihovna rozšiřující jazyk C# o podporu konceptů funkcionálního programování
diploma thesis (DEFENDED)
View/ Open
Permanent link
http://hdl.handle.net/20.500.11956/121344Identifiers
Study Information System: 223566
Collections
- Kvalifikační práce [11196]
Author
Advisor
Referee
Ježek, Pavel
Faculty / Institute
Faculty of Mathematics and Physics
Discipline
Software and Data Engineering
Department
Department of Distributed and Dependable Systems
Date of defense
16. 9. 2020
Publisher
Univerzita Karlova, Matematicko-fyzikální fakultaLanguage
English
Grade
Very good
Keywords (Czech)
csharp, funkční programování, teorie kategorií, monády, asynchronní programováníKeywords (English)
csharp, functional programming, category theory, monads, asynchronous programmingHlavním cílem této diplomové práce bylo zavedení funkční programovací (FP) knihovny s názvem Funk, která rozšiřuje C# s podporou konceptů přítomných ve funkčních programovacích jazycích, jako jsou F# a Scala. Funk využívá mnoho funkčních programovacích konceptů, včetně neměnnosti, sladění vzorů a různých typů monád, společně se silnějším psaním. Zavedení těchto konceptů do jazyka C# pomáhá vyhnout se mnoha chybám v běhu a vzorovému kódu a také umožňuje vývojářům psát kód C# deklarativně, nikoli imperativně, což usnadňuje každodenní vývoj softwaru a snižuje náchylnost k chybám. Kromě toho diplomová práce analyzuje a porovnává Funk se stávajícími funkčními programovacími knihovnami, jako je Language-ext a FuncSharp. Nakonec analyzuje nové funkce C# 8, které zahrnují nulovatelné typy odkazů a sladění vzorů a porovnává je s funkcemi knihovny Funk.
The main goal of this thesis was to implement a functional programming (FP) library named Funk that extends C# with support for concepts present in functional programming languages, such as F# and Scala. Funk utilizes many functional programming concepts, including immutability, pattern matching, and various types of monads, together with stronger typing. Introduction of these concepts into C# helps in avoiding many runtime errors and boilerplate code, and it also lets developers write C# code in a declarative rather than in an imperative way, making the day-to-day software development easier and less error-prone. Additionally, the thesis analyzes and compares Funk with existing functional programming libraries such as Language-ext and FuncSharp. Finally, it analyzes the new features of C# 8, which include nullable reference types and pattern matching and compares them with the functionalities of the Funk library.