Home

From Category Theory for Programmers - Series 1

Lecture 3

(part 2)

(programming example with c++)

Technical addendum

Translated the c++ example to c#

public class PairResult<T>
{
    public T Value { get; set; }
    public string Note { get; set; }
}

public PairResult<int> Increment(int x)
{
    return new PairResult<int>() { Value = x + 1, Note = "Increment;" };
}

public PairResult<int> Add3(int x)
{
    return new PairResult<int>() { Value = x + 3, Note = "Add3;" };
}

public Func<int, PairResult<int>> Compose(Func<int, PairResult<int>> first, Func<int, PairResult<int>> second)
{
    Func<int, PairResult<int>> composed = x => { 
    
        var pair1 = first(x);
        var pair2 = second(pair1.Value);
        
        return new PairResult<int>() { Value = pair2.Value, Note = pair1.Note + pair2.Note };
    };
    
    return composed;
}

// C# interactive :

> var inc2 = Compose(Increment, Increment);
> inc2(1)
Submission#0.PairResult<int> { Note="Increment;Increment;", Value=3 }

> var c = Compose(Increment, Add3);
> c(1)
Submission#0.PairResult<int> { Note="Increment;Add3;", Value=5 }

> var d = Compose(inc2, c);
> d(1)
Submission#0.PairResult<int> { Note="Increment;Increment;Increment;Add3;", Value=7 }