{"id":16715999,"url":"https://github.com/panesofglass/computation-expressions-workshop","last_synced_at":"2025-03-21T20:34:02.377Z","repository":{"id":49791853,"uuid":"145645795","full_name":"panesofglass/computation-expressions-workshop","owner":"panesofglass","description":"F# Computation Expressions Workshop","archived":false,"fork":false,"pushed_at":"2018-09-27T07:16:01.000Z","size":1727,"stargazers_count":61,"open_issues_count":0,"forks_count":13,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-10-13T21:11:40.729Z","etag":null,"topics":["computation-expressions","dsl","fsharp","fsharp-exercises","language-extensions","linq","workshop"],"latest_commit_sha":null,"homepage":"https://www.openfsharp.org/agenda/workshop/","language":"F#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/panesofglass.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-08-22T02:35:53.000Z","updated_at":"2024-04-06T12:11:39.000Z","dependencies_parsed_at":"2022-09-12T21:14:29.347Z","dependency_job_id":null,"html_url":"https://github.com/panesofglass/computation-expressions-workshop","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/panesofglass%2Fcomputation-expressions-workshop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/panesofglass%2Fcomputation-expressions-workshop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/panesofglass%2Fcomputation-expressions-workshop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/panesofglass%2Fcomputation-expressions-workshop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/panesofglass","download_url":"https://codeload.github.com/panesofglass/computation-expressions-workshop/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221818989,"owners_count":16885868,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["computation-expressions","dsl","fsharp","fsharp-exercises","language-extensions","linq","workshop"],"created_at":"2024-10-12T21:11:27.023Z","updated_at":"2024-10-28T10:50:51.282Z","avatar_url":"https://github.com/panesofglass.png","language":"F#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Computation Expressions Workshop\n\nThe Computations Expressions Workshop collects and presents the content\nof several papers and presents the material as a set of tutorials.\nThis content is intended to be used in a workshop setting.\n\n## Setting up\n\nThe workshop uses the `dotnet` CLI as a base case. However, attendees may\nelect to use an editor of their choice, though the steps to use those tools\nwill be omitted from the tutorials.\n\n### Install `dotnet`\n\n* Install the `dotnet` CLI through the [.NET Core SDK](https://www.microsoft.com/net/download)\n\nNOTE: Some IDEs will also install the `dotnet` CLI.\n\n### `git clone` Workshop Repository\n\nClone the workshop repository so you have the materials available locally.\nEach tutorial is also tagged so that you can reference the finished result if you get stuck.\n`git clone https://github.com/panesofglass/computation-expressions-workshop`\n\n### Create a New Expecto Project\n\nNow that you have the basics, you can get started by creating a new project with [Expecto](https://github.com/haf/expecto).\n\n* Install the [Expecto](https://github.com/haf/expecto) template with `dotnet new -i Expecto.Template`\n* Create a new project with `dotnet new expecto -lang fsharp`\n\n# Outline\n\n## Introduction\n\n### What?\n\n1. Computation Expressions\n2. Query Expressions\n\n### Why?\n\n1. Reduce arrowhead pattern\n2. Familiar syntax, e.g. `let` and `do` with extensions: `let!`, `do!`, `return`, etc.\n3. Language integrated queries (LINQ), e.g. `query { for x in source do select x }`\n4. Language extensions without macros\n\n## Exercises\n\n1. Computation Expressions: `OptionBuilder`\n    1. Without a computation expression\n    2. `Return`\n    3. `Bind`\n    4. Side effects and `Delay`\n    5. `Run`ning a delayed computation\n    6. `do!` with a `unit` result using `Combine`\n    7. `if ... then` without an `else`\n2. Combining Results: `ChoiceBuilder`\n3. CEs for Compuations: `StateBuilder`\n    1. Without a computation expression\n    2. Side effects passed into a computation\n    3. Differences between \"container\" and \"computation\"\n4. Sequences: `StackBuilder`\n    1. `Yield` = `Return`\n    2. `For` = `Bind`\n    3. Differences in `Delay`\n5. Error Handling, Disposal, and More\n    1. `TryWith`\n    2. `TryFinally`\n    3. `Using`\n    4. `While`\n    5. `Quote`\n6. Extending Computation Expressions\n    1. Method Overloads\n    2. Adding Custom Extensions\n7. Query Expressions\n8. Embedded DSLs\n    1. NuGet\n    2. IL\n    3.  Saturn\n    4.  Freya\n\n## Project\n\n## Wrap up\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpanesofglass%2Fcomputation-expressions-workshop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpanesofglass%2Fcomputation-expressions-workshop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpanesofglass%2Fcomputation-expressions-workshop/lists"}