{"id":22277967,"url":"https://github.com/wraikny/efffs","last_synced_at":"2025-07-14T15:08:20.356Z","repository":{"id":42525803,"uuid":"241921885","full_name":"wraikny/EffFs","owner":"wraikny","description":"F# Effect System based on SRTP","archived":false,"fork":false,"pushed_at":"2024-10-11T09:27:51.000Z","size":122,"stargazers_count":3,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-12T01:11:48.190Z","etag":null,"topics":["effect-system","fsharp"],"latest_commit_sha":null,"homepage":"","language":"F#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wraikny.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-02-20T15:39:54.000Z","updated_at":"2024-10-11T09:27:54.000Z","dependencies_parsed_at":"2023-01-20T03:03:59.519Z","dependency_job_id":null,"html_url":"https://github.com/wraikny/EffFs","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/wraikny/EffFs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wraikny%2FEffFs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wraikny%2FEffFs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wraikny%2FEffFs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wraikny%2FEffFs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wraikny","download_url":"https://codeload.github.com/wraikny/EffFs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wraikny%2FEffFs/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265311871,"owners_count":23745161,"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":["effect-system","fsharp"],"created_at":"2024-12-03T15:12:20.458Z","updated_at":"2025-07-14T15:08:20.333Z","avatar_url":"https://github.com/wraikny.png","language":"F#","readme":"[![](https://github.com/wraikny/EffFs/workflows/CI/badge.svg)](https://github.com/wraikny/EffFs/actions?workflow=CI)\n[![Nuget](https://img.shields.io/nuget/v/EffFs?style=plastic)](https://www.nuget.org/packages/EffFs/)\n\n# EffFs\nF# Effect System based on SRTP.  \nCaution: Multiple handlers cannot be composed.  \n\n[SharpLab compilation result](https://sharplab.io/#v2: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) \nof [example.fsx](example/example.fsx)\n\n## Installation\n- Available on Nuget: [`dotnet add package EffFs`](https://www.nuget.org/packages/EffFs)\n\n\n## Example\nAnd [more examples](example/example.fsx)\n\n```fsharp\n#load \"../src/EffFs/EffFs.fs\"\nopen EffFs\n\ntype RandomInt = RandomInt of int with\n  static member Effect(_) = Eff.marker\u003cint\u003e\n\ntype Logging = Logging of string with\n  static member Effect(_) = Eff.marker\u003cunit\u003e\n\nlet inline foo() = eff {\n  let! a = RandomInt 100\n  do! Logging (sprintf \"%d\" a)\n  let b = a + a\n  return (a, b)\n}\n\nlet rand = System.Random()\n\ntype Handler = Handler with\n  static member inline Value(_, x) = x\n\n  static member inline Handle(RandomInt a, k) =\n    rand.Next(a) |\u003e k\n\n  static member inline Handle(Logging s, k) =\n    printfn \"[Log] %s\" s; k()\n\nfoo()\n|\u003e Eff.handle Handler\n|\u003e printfn \"%A\"\n\n\n// example output\n(*\n[Log] 66\n(66, 132)\n*)\n```\n\n## Build\n.NET 5.0 or later is required.\n\n```sh\n$ dotnet build src/EffFs # Debug\n$ dotnet build src/EffFs -c Release\n```\n\n\n## Examples\n```\n$ dotnet fsi --exec example/example.fs\n```\n\n## Make Nuget Package\n\n```\n$ # edit RELEASE_NOTES.md\n$ dotnet fake build -t assemblyinfo\n$ dotnet fake build -t pack\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwraikny%2Fefffs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwraikny%2Fefffs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwraikny%2Fefffs/lists"}