Skip to content
/ Eff Public
forked from nessos/Eff

A library design for programming with effects and handlers in C# 7

License

Notifications You must be signed in to change notification settings

stjordanis/Eff

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Eff

A library design for programming with effects and handlers in C# 7, inspired by the Eff programming language and the implementation of Algebraic Effects in OCaml, Eff Directly in OCaml. Eff can handle effect interpretation, detailed exception tracing and trace logging.

// Effect example
async Eff<int> Foo()
{
    var y = await Effect.Random();
    return y;
}
    
// Effect handler
public class CustomEffectHandler : EffectHandler
{
    private readonly Random random;
    public CustomEffectHandler(Random random)
    {
        this.random = random;
    }

    public override async Task Handle<TResult>(IEffect<TResult> effect)
    {
        switch (effect)
        {
            case RandomEffect randomEffect:
                randomEffect.SetResult(random.Next());
                break;
        }
    }
}

// Set effect handler and execute
var handler = new CustomEffectHandler(new Random());
var x = Foo().Run(handler).Result;

Install

via NuGet:

PM> Install-Package Eff

About

A library design for programming with effects and handlers in C# 7

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 100.0%