Skip to content

Instantly share code, notes, and snippets.

Pierre Irrmann pirrmann

Block or report user

Report or block pirrmann

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
View Differ.fs
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 Oct 30, 2017
DocTales : WIP
View Document.fs
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 Jul 26, 2017
Escher's fish using FSketch
View Escher.fsx
#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
View BindMany.fsx
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 Oct 12, 2016
Titanic CSV loading
View Parsing.fsx
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 Sep 19, 2016
F# Dynamic property get with null values
View Dynamic.fsx
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
View ChaosBuilder.fsx
#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
View keybase.md

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:

@pirrmann
pirrmann / RPN.fs
Last active Jan 15, 2016
Reverse Polish Notation
View RPN.fs
let (|Operator|_|) s =
match s with
| "+" -> Some (+)
| "-" -> Some (-)
| "*" -> Some (*)
| "/" -> Some (/)
| _ -> None
let eval state input =
match input, state with
@pirrmann
pirrmann / Constraints
Created Apr 9, 2015
Statically resolved member constraints
View Constraints
type SyntaxToken = string
type X =
{
SomeProperty: string
} with
member this.AddModifiers(tokens:SyntaxToken array) =
{ this with
SomeProperty = sprintf "%s + %s" (this.SomeProperty) (System.String.Join(",", tokens)) }
You can’t perform that action at this time.