Skip to content

Instantly share code, notes, and snippets.

View davidgrenier's full-sized avatar

David Grenier davidgrenier

View GitHub Profile
let datum = "toalla"
let width = 99
System.String(datum |> Seq.truncate width |> Seq.toArray)
|> sprintf "%-*s" width
#r "System.Data.Linq"
#r "FSharp.Data.TypeProviders"
open Microsoft.FSharp.Linq
open Microsoft.FSharp.Data.TypeProviders
type Company = SqlDataConnection<ConnectionString = @"Server=(localdb)\Projects;Database=Company;Integrated Security=SSPI">
let db = Company.GetDataContext()
open System.Text.RegularExpressions
type Clip = System.Windows.Forms.Clipboard
[<System.STAThread>]
do
Regex.Matches(Clip.GetText(), @"\d+", RegexOptions.Singleline)
|> Seq.cast<Match>
|> Seq.map (fun x -> x.Value)
|> Seq.distinct
|> String.concat ","
open System
type Message=
| GetToken of AsyncReplyChannel<IDisposable>
| Release
let start count =
let agent =
MailboxProcessor.Start(fun inbox ->
let token =
@davidgrenier
davidgrenier / BlockQuote.fs
Created October 8, 2012 15:27
Recursive descent parser using F# Active Patterns compiled to JavaScript with WebSharper
open IntelliFactory.WebSharper
open IntelliFactory.WebSharper.Html
open Server.Tonys
[<JavaScript>]
let string chars = System.String (chars |> List.rev |> List.toArray)
[<JavaScript>]
let rec (|Eval|) = function
| Normal (c :: rest) ->
@davidgrenier
davidgrenier / seqYield vs functions.fs
Created July 4, 2012 17:39
seqYield vs functions
seq {
for x in elements do
if x % 3 = 0 then
yield x + 12
}
// instead do:
elements
|> Seq.filter (fun x -> x % 3 = 0)
let asyncDownload1 (url : string) =
let req = HttpWebRequest.Create url
req.BeginGetResponse(fun ar ->
use resp = req.EndGetResponse(ar)
use stream = resp.GetResponseStream()
let result = ref [||]
let buffer = Array.zeroCreate 8192 : byte []
let rec readAll () =
stream.BeginRead(buffer, 0, buffer.Length, fun ar2 ->
match stream.EndRead ar2 with
@davidgrenier
davidgrenier / gist:3011180
Created June 28, 2012 12:51
Option monad
type OptionBuilder() =
member this.Return x = Some x
member this.Bind(x, f) =
match x with
| Some x -> f x
| None -> None
member this.ReturnFrom x = x
let option = OptionBuilder()
@davidgrenier
davidgrenier / random.fs
Created June 21, 2012 14:24
Thread-safe random
let next =
let result = ref 0
let rnd = System.Random()
let rec roll () =
let old = !result
let next = rnd.Next()
if System.Threading.Interlocked.CompareExchange(result, next, old) = old then
next
else
roll()
open System.Text.RegularExpressions
System.IO.File.ReadAllText @"C:\Documents and Settings\dgrenier\Desktop\PrintInternalOrderDetail.pdf"
|> (fun input -> Regex.Matches(input, @"(?s:Length (\d+).*?stream\r\n(.*?)\r\nendstream)"))
|> Seq.cast<Match>
|> Seq.map (fun m -> int m.Groups.[1].Value, m.Groups.[2].Value)