Skip to content

Instantly share code, notes, and snippets.

@vasily-kirichenko
Created February 14, 2015 19:13
Show Gist options
  • Save vasily-kirichenko/dca54aed344f05fc1ae3 to your computer and use it in GitHub Desktop.
Save vasily-kirichenko/dca54aed344f05fc1ae3 to your computer and use it in GitHub Desktop.
#r @"packages\FSharpx.Core.1.8.41\lib\40\FSharpx.Core.dll"
open FSharpx.Continuation
type Location = float * float
type Radius = float
type Width = float
type Angle = float
type Primitive =
| Circle of Location * Radius
| MultiPrimitive of Primitive List
let lengthContCE p =
let rec loop x = cont {
match x with
| Circle(_, r) -> return (System.Math.PI * r * 2.)
| MultiPrimitive [] -> return 0.
| MultiPrimitive(h :: t) ->
let! hResult = loop h
let! tResult = loop (MultiPrimitive t)
return hResult + tResult
}
runCont (loop p) id (fun _ -> 0.)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment