By Ethan Niser & maxwell brown & Stefano Pigozzi
Check /src/every-tutorials
folder. in this files, there are some example code and comments. These codes are the best resource I've found for learning effect-ts.
- Ethan Niser - effect-workshop
- Maxwell Brown - advanced-effect-workshop
- Stefano Pigozzi - effect-crashcourse
- Official Repo's readme.md files
- fp-ts Official Repo
- Effect Docs
- Effect API Docs - There is no detailed description here and it will be used to verify the type signature
- Effect Official Repository
- Effect Discord
- Effect Official Youtube Channel
- Introduction to Effect by Michael Arnaldi in Worker Conf
- Michael Arnaldi introduce Effect-ts in TypeScript Berlin Meetup
- WHY EFFECT? BY MICHAEL ARNALDI in Effect Meetup (SAN FRANCISCO)
- Functional Effect Systems To The Rescue by Michael Arnaldi
- Lambda Lounge Jan - Effect TS by Michael Arnaldi
- Michael Arnaldi interview with Ihar Abukhouski
- ZIO as a Language by Michael Arnaldi
- Happy Path Programming - TypeScript & Effects with Michael Arnaldi
- The Developers' Bakery - Effect with Michael Arnaldi
- ybogomolov.me : Intro To Effect, Part 5: Software Transactional Memory in Effect
- ybogomolov.me : Intro To Effect, Part 4: Concurrency in Effect
- ybogomolov.me : Intro To Effect, Part 3: Managing Dependencies
- ybogomolov.me : Intro To Effect, Part 2: Handling Errors
- ybogomolov.me : Intro To Effect, Part 1: What Is Effect?
It is also helpful to learn fp-ts because fp-ts is the core library of effect-ts implementation.
- Functional Programming with TypeScript by Sahand Javid
- fp-ts Tutorial series on YouTube by @MrFunctor
- Combinators Part I
- Combinators Part II
- Tagless final
- Smart constructors
- Introduction to property based testing
- Algebraic Data Types
- "
fp-ts
to the max" (TypeScript port of John De Goes's "FP to the max" in Scala)
- fp-ts recipes โ A collection of practical recipes for working with
fp-ts
- Mostly adequate guide to FP-TS partial rewrite by ChuckJonas
- Book: Introduction to Functional Programming by Giulio Canti English translation by Enrico Polanski
- When An Error Is Not An Exception โ How we rewrote the core of Prism to make it almost totally functional
- Introduction series to FP-TS by Yuriy Bogomolov
- The ReaderTaskMonad by Andy White
- FP-TS for HTTP-requests by Kimmo Sasskilahti
- Basic introduction to FP-TS by Dave Tayls
- Practical guide to FP-TS by Ryan Lee
Reference : fp-ts official repo
npm i -g tsx
I'm using bun just because its over twice as fast to run typescript than with tsx
or ts-node
If you want to also use bun you can install it at https://bun.sh/docs/installation
npm i
yarn i
pnpm i
bun i
Hovering to see types, autocompletion, and go-to-definition are gonna be pretty useful. I'll be using VSCode, but you can use any editor that supports LSP.
The slides are available online at https://effect-workshop-slides.vercel.app But, if you wish to run the slides locally:
cd slides
bun run dev
Each part has its own folder. Within those folders you find these folders:
This contains typescript files that have code examples and comment explanations for individual concepts. I will go through these files in the workshop. Free free to follow along and read the comments.
This contains typescript files that define some practice exercises for individual concepts. They define test cases that you can check by just running the file.
Solutions are located in the solutions
folder
For parts 2 and 3, we will be rewriting a non-effect application to effect. The project folder contains the non-effect application, and is where if you want to follow along, you can modify the code to use effect.
To reinforce your learning, I've provided some ideas for how to expand each project when you get home. Try them out on your own, and if you need help feel free to @ me in the Effect discord- I'd love to see how people approach each problem.
For parts 2 & 3, 'breakpoints' defines each of the steps we will take to refactor the non-effect application to effect. Each file is a folder. All changes between steps are described in the changes.md
file.
If you get lost, you can always copy whatever 'breakpoint' you are on to the project
folder and continue from there.
Stands for 'scratchpad'. Pretty useful for just trying out some code that doesn't necessarily belong anywhere.
bun run pad
Every file is prefixed with a number. I have defined a bun of scripts so you don't have to type out the whole file name / path.
They follow this pattern:
part = 1 | 2 | 3 | 4
section = s (snippets) | e (exercises) | p (project) | b (breakpoints)
fileOrFolderNumber = (if folder will run index.ts)
bun run part-section-fileOrFolderNumber
For example, to run the first snippet in part 1:
bun run 1-s-1
To run the first exercise in part 2:
bun run 2-e-1
To run the part 3 project:
bun run 3-p
For quick reference or for review feel free to read CHEATSHEET.md
{
"Gen Function $": {
"prefix": "gg",
"body": ["function* (_) {\n\t$0\n}"],
"description": "Generator function with _ input"
},
"Gen Function $ (wrapped)": {
"prefix": "egg",
"body": ["Effect.gen(function* (_) {\n\t$0\n})"],
"description": "Generator function with _ input"
},
"Gen Yield $": {
"prefix": "yy",
"body": ["yield* _($0)"],
"description": "Yield generator calling _()"
},
"Gen Yield $ (const)": {
"prefix": "cyy",
"body": ["const $1 = yield* _($0)"],
"description": "Yield generator calling _()"
}
}