Skip to content

Instantly share code, notes, and snippets.

View pirrmann's full-sized avatar

Pierre Irrmann pirrmann

View GitHub Profile
@pirrmann
pirrmann / Fib.il
Created October 27, 2021 12:10
IL Fib with tail call
.assembly ConsoleApp
{
}
.class public auto ansi abstract sealed beforefieldinit Program
extends System.Object
{
// Methods
.method assembly hidebysig static
int32 FibAcc (
@pirrmann
pirrmann / Rot13-starter.fsx
Created September 3, 2019 10:08
Rot13-starter.fsx
let stringToCharList (s:string) = Seq.toList s
let charListToString (chars: char list) = System.String(List.toArray chars)
let shiftCharList (charList: char list) =
charList // not really shifted
let rot13 (s: string) =
let charList = stringToCharList s
let shiftedCharList = shiftCharList charList
charListToString shiftedCharList
@pirrmann
pirrmann / Differ.fs
Created March 21, 2018 14:27
Differ
type DifferenceType<'TKey, 'T> =
| Added of 'TKey * 'T
| Removed of 'TKey * 'T
| Modified of 'TKey * 'T * 'T * seq<string * (string * string)> with
member this.Key =
match this with
| Added (key, _)
| Removed (key, _)
| Modified (key, _, _, _) -> key
@pirrmann
pirrmann / Document.fs
Last active October 30, 2017 17:33
DocTales : WIP
module Document.Core
type Emphasis = | Regular | Medium | Strong
type TextPart = { Text:string; Emphasis:Emphasis; Style:string option }
with static member Regular(text) = { Text=text; Emphasis=Regular; Style=None }
static member Medium(text) = { Text=text; Emphasis=Medium; Style=None }
static member Strong(text) = { Text=text; Emphasis=Strong; Style=None }
type Text = Text of TextPart list
with static member Regular(text) = Text([TextPart.Regular(text)])
@pirrmann
pirrmann / Escher.fsx
Created July 26, 2017 05:06
Escher's fish using FSketch
#r "../packages/FSketch/lib/net452/FSketch.dll"
#r "../packages/FSketch.Svg/lib/net452/FSketch.Svg.dll"
#r "../packages/FSketch.Drawing/lib/net452/FSketch.Drawing.dll"
open FSketch
open FSketch.Dsl
open FSketch.Builder
#r "../packages/FSketch.Winforms/lib/net452/FSketch.Winforms.dll"
fsi.AddPrintTransformer(fun (shapes:FSketch.Shapes) ->
shapes |> FSketch.Frame.FromShapes |> FSketch.Winforms.WinformsDrawer.Draw |> ignore
type Result<'T> =
| Success of 'T
| Failure of string
let bind f = function | Success a -> f a | Failure b -> Failure b
let map f = function | Success a -> Success (f a) | Failure b -> Failure b
let private combine2 fn2 fn1 arg =
match (fn1 arg, fn2 arg) with
| Success a, Success b -> Success (a, b)
@pirrmann
pirrmann / Parsing.fsx
Last active October 12, 2016 08:00
Titanic CSV loading
let file = System.IO.File.ReadAllText(__SOURCE_DIRECTORY__ + "/training.csv")
let parseLine line =
let makeWord = Seq.rev >> Seq.toArray >> System.String
let rec parseFields chars =
match chars with
| '\"' :: chars' -> parseEscaped [] chars'
| chars' -> parseUnescaped [] chars'
and parseEscaped acc chars = seq {
@pirrmann
pirrmann / Dynamic.fsx
Created September 19, 2016 13:00
F# Dynamic property get with null values
open FSharp.Interop.Dynamic
open Dynamitey
let dynamicPropertyGet<'TResult> (name:string) (target:obj) : 'TResult option =
let resultType = typeof<'TResult>
let (|NoConversion| Conversion|) t = if t = typeof<obj> then NoConversion else Conversion
let convert r = match resultType with | NoConversion -> r | _ -> dynImplicit(r)
match target with
@pirrmann
pirrmann / ChaosBuilder.fsx
Last active April 1, 2016 06:58
ChaosBuilder
#r "packages/Unquote/lib/net45/Unquote.dll"
open FSharp.Quotations
open Swensen.Unquote
type IMutationSitePicker =
abstract member PickNextSite: bool
abstract member NotifyIgnoredSite: unit -> unit
abstract member NotifyMutation: unit -> unit

Keybase proof

I hereby claim:

  • I am pirrmann on github.
  • I am pirrmann (https://keybase.io/pirrmann) on keybase.
  • I have a public key whose fingerprint is C754 AB85 AFA5 4BC4 12CA BDF5 7CE5 02AF 2D5C C545

To claim this, I am signing this object: