Scoop
- firacode
- windows-terminal
- starship
- gopass
- pass-winmenu-nogpg
- micro
- nodejs
- jq
namespace EsBankAccount.Account; | |
using Events = IReadOnlyCollection<IEvent>; | |
public record Transaction(decimal Amount, DateTime Date); | |
// events | |
public interface IEvent { } // used to mimic a discriminated union | |
public record Deposited(Transaction Transaction) : IEvent; | |
public record Withdrawn(Transaction Transaction) : IEvent; |
type Pins = int | |
let [<Literal>] MaxPins : Pins = 10 | |
type Frame = | |
| Strike of Pins | |
| Spare of Pins * Pins | |
| Open of Pins * Pins | |
| Pending of Pins | |
| Final of Pins * Pins option * Pins option |
[core] | |
excludesFile = ~/.gitignore | |
[user] | |
name = My Name | |
[includeIf "gitdir:~/git/"] | |
path = ~/.gitconfig-work | |
[includeIf "gitdir:~/github/"] | |
path = ~/.gitconfig-home |
module AsyncSeq = | |
open System.Collections.Generic | |
open System.Threading.Tasks | |
let cancelled (cancellationToken: CancellationToken) = | |
Task.FromCanceled<bool> cancellationToken | |
|> ValueTask<bool> | |
let ofSeq (sq: Task<'T> seq) = { | |
new IAsyncEnumerable<'T> with |
(* | |
| Method | Mean | Error | StdDev | Allocated | | |
|------- |--------:|--------:|--------:|----------:| | |
| Task | 15.99 s | 0.107 s | 0.095 s | 314 KB | | |
| Async | 16.02 s | 0.089 s | 0.079 s | 990 KB | | |
*) | |
open System.Threading.Tasks | |
open BenchmarkDotNet.Attributes | |
open BenchmarkDotNet.Running |
[<AutoOpen>] | |
module Helpers = | |
let rec (|NestedHttpRequestException|_|) (e: exn) = | |
match e with | |
| null -> None | |
| :? Net.Http.HttpRequestException as e -> Some e | |
| e -> (|NestedHttpRequestException|_|) e.InnerException | |
[<RequireQualifiedAccess>] | |
module ConsulKv = |
[<RequireQualifiedAccess>] | |
module Notify | |
open System | |
open Elmish | |
open Bolero | |
open Bolero.Html | |
type State = Opened | Closed |
#r "nuget: Flurl.Http" | |
module HttpApi = | |
open System | |
open System.Net | |
open System.Text.Json | |
open Flurl.Http | |
type Serializer (opt) = | |
interface Configuration.ISerializer with |
// 1. pure, don't think about IO at all | |
module Domain = | |
let add x y = x + y | |
// 2. think about IO but not its implementation | |
module App = | |
let add (getX: unit -> Async<int32>) y = | |
async { | |
let! x = getX () | |
return Domain.add x y |