Skip to content

Instantly share code, notes, and snippets.

@dsyme
Created May 9, 2018 16:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dsyme/fb5c70ce6b16ac3047b8ceae057ccccb to your computer and use it in GitHub Desktop.
Save dsyme/fb5c70ce6b16ac3047b8ceae057ccccb to your computer and use it in GitHub Desktop.
let Stack() = System.Diagnostics.StackTrace(true)
type Computation<'T> = C of System.Diagnostics.StackTrace * (unit -> 'T)
[<System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)>]
let bind (C (fstack, f)) k = C(Stack(), fun () -> let (C (f2stack, f2)) = k (f ()) in f2())
[<System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)>]
let ret x = C (Stack(), fun () -> x)
let add c1 c2 = bind c1 (fun v1 -> bind c2 (fun v2 -> ret (v1 + v2)))
let stack msg (C (stack , f)) = C (stack, (fun () -> System.Console.WriteLine("----{0}-----\n{1}\n----------", msg, stack); f()))
let run (C (_,f)) = f ()
@dsyme
Copy link
Author

dsyme commented May 9, 2018

Gives stack:

----f1-----
   at A.Stack..ctor() in C:\GitHub\dsyme\visualfsharp\a.fs:line 3
   at A.ret[a](a x) in C:\GitHub\dsyme\visualfsharp\a.fs:line 12
   at A.f1() in C:\GitHub\dsyme\visualfsharp\a.fs:line 45
   at A.f3() in C:\GitHub\dsyme\visualfsharp\a.fs:line 47
   at A.main(String[] argv) in C:\GitHub\dsyme\visualfsharp\a.fs:line 51

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment