Skip to content

Instantly share code, notes, and snippets.

View dadhi's full-sized avatar
🎯
Focusing

Maksim Volkau dadhi

🎯
Focusing
View GitHub Profile
@dadhi
dadhi / StackPool.cs
Created June 12, 2018 12:48
Stack based object pool C# .NET tailored for performance and simplicity
using System;
using System.Threading;
using static System.Console;
public class Test
{
public static void Main()
{
var p = new StackPool<S>();
var s1 = Rent(p, "55");
@dadhi
dadhi / NugetPackagesPath.props
Created February 27, 2018 08:44
Gets the nuget package location
<!-- Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -->
<Project>
<PropertyGroup>
<!-- Respect environment variable for the NuGet Packages Root if set; otherwise, use the current default location -->
<NuGetPackageRoot Condition="'$(NuGetPackageRoot)' == ''">$(NUGET_PACKAGES)</NuGetPackageRoot>
<NuGetPackageRoot Condition="'$(NuGetPackageRoot)' == '' AND '$(OS)' == 'Windows_NT'">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageRoot Condition="'$(NuGetPackageRoot)' == '' AND '$(OS)' != 'Windows_NT'">$([System.Environment]::GetFolderPath(SpecialFolder.Personal))\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageRoot Condition="!HasTrailingSlash('$(NuGetPackageRoot)')">$(NuGetPackageRoot)\</NuGetPackageRoot>
</PropertyGroup>
</Project>
@dadhi
dadhi / EitherOr.cs
Created January 24, 2018 23:52
Struct Either with renaming in C#
using System;
public class C {
public Result<int>.Or M() =>
Result<int>.Left(2);
}
public class Result<T> : Either<T, Exception> {}
public class Either<L, R>
{
@dadhi
dadhi / FreeIOMonad.cs
Last active October 9, 2022 03:05
Example of Free IO monad in pure C# with separated re-usable monad implementation
/*
Modified from the original https://gist.github.com/louthy/524fbe8965d3a2aae1b576cdd8e971e4
- removed dependency on [language-ext](https://github.com/louthy/language-ext)
- separated monadic boilerplate, so you may concentrate on describing the operations and interpretation of the program
- removed `IO<A>.Faulted` to simplify the examples. It can be added back in straightforward manner.
Useful links:
- [John DeGoes: Beyond Free Monads - λC Winter Retreat 2017](https://www.youtube.com/watch?v=A-lmrvsUi2Y)
- [Free and tagless compared - how not to commit to a monad too early](https://softwaremill.com/free-tagless-compared-how-not-to-commit-to-monad-too-early)
@dadhi
dadhi / Cofree.cs
Last active December 28, 2017 08:08
C# Cofree experiments from John De Goes talk https://www.youtube.com/watch?v=R_nYc4FItcI
using System;
namespace FP
{
// final case class Cofree[F[_], A](head: A, tail: F[Cofree[F, A]])
public interface ICofree<F, _, A>
{
A Head { get; }
CofreeF Tail<CofreeF>() where CofreeF : ICofree<F, _, A>;
}
@dadhi
dadhi / PureCSharpIOMonad.cs
Last active January 14, 2018 18:31
Pure C# IO monad (original is using LanguageExt lib https://gist.github.com/louthy/524fbe8965d3a2aae1b576cdd8e971e4)
// Modified from the original https://gist.github.com/louthy/524fbe8965d3a2aae1b576cdd8e971e4
using System;
using System.IO;
using System.Linq;
using System.Collections.Generic;
using System.Threading.Tasks;
using static System.Linq.Enumerable;
using static IOExample.Unit;
@dadhi
dadhi / NServiceBus_PipelineExecutionExtensions.cs
Last active November 12, 2017 19:45
NServiceBus PipelineExecutionExtensions implementation based on FastExpressionCompiler.ExpressionInfo
#define USE_EXPRESSION_INFO // I am here!
namespace NServiceBus
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Threading.Tasks;
@dadhi
dadhi / DelegateVsInterfaceStruct.cs
Last active August 10, 2017 08:04
Benchmark of Delegate vs Interface Struct implementation
using System;
using BenchmarkDotNet.Attributes;
namespace Playground
{
[MemoryDiagnoser]
public class DelegateVsInterfaceStruct
{
[Params(10, 100, 1000)] public int ArraySize;
@dadhi
dadhi / Transducers.cs
Last active February 23, 2017 12:05
Sample of Clojure Transducers in C# (LINQPad snippet)
Func<Func<T,T,T>, Func<T,T,T>> Mapping<T>(Func<T,T> map)
{
return reduce => (sum, item) => reduce(sum, map(item));
}
Func<Func<T,T,T>, Func<T,T,T>> Filtering<T>(Func<T,bool> condition)
{
return reduce => (sum, item) => condition(item) ? reduce(sum, item) : sum;
}
@dadhi
dadhi / ClearingInput.elm
Created October 12, 2016 07:45
Small example if clearing input value in elm
import Html exposing (div, button, text, input, p)
import Html.App exposing (beginnerProgram)
import Html.Events exposing (onClick, onInput)
import Html.Attributes exposing (placeholder, value)
main =
beginnerProgram { model = model, view = view, update = update }