Skip to content

Instantly share code, notes, and snippets.

@evilz
Created December 16, 2020 23:03
Show Gist options
  • Select an option

  • Save evilz/d2f951b25556c568346366d66fe9eac4 to your computer and use it in GitHub Desktop.

Select an option

Save evilz/d2f951b25556c568346366d66fe9eac4 to your computer and use it in GitHub Desktop.
#r "nuget:FsPickler"
#r "nuget:FsPickler.Json"
#r "nuget:FSharp.Quotations.Evaluator"
open MBrace.FsPickler
open MBrace.FsPickler.Json
open FSharp.Quotations
open FSharp.Quotations.Evaluator
open System.IO
open System.Text
let serializer = JsonSerializer(indent = true)
let utf8 = UTF8Encoding(false)
let toJson (x: 'a) =
use stream = new MemoryStream()
serializer.Serialize(stream, x)
stream.ToArray() |> utf8.GetString
let parseJson<'a> json =
use reader = new StringReader(json)
serializer.Deserialize<'a>(reader)
let oh = 42
let f = <@ fun x -> x + oh @>
let serialized = toJson f
let deserialized = parseJson<Expr<int -> int>> serialized
let increment = deserialized |> QuotationEvaluator.Evaluate
increment 1, serialized
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment