let func : HttpFunc = handler (Some >> Task.FromResult)

type Base1() =
    abstract member F : unit -> unit
    default u.F() =
        printfn "F Base1"

type Derived1() =
    inherit Base1()
    override u.F() =
        printfn "F Derived1"

let d1 : Derived1 = Derived1()

let base1 = d1 :> Base1
let derived1 = base1 :?> Derived1

type PersonName =
    | FirstOnly of string
    | LastOnly of string
    | FirstLast of string * string

type Shape =
    | Rectangle of height : float * width : float
    | Circle of radius : float

type MyInterface =
   abstract member Add: int -> int -> int
   abstract member Pi : float

exception Error1 of string
exception Error2 of string * int

----------------------------------------------------

[
	["keyword", "let"], " func ",
	["punctuation", ":"], ["class-name", ["HttpFunc"]],
	["operator", "="], " handler ", ["punctuation", "("],
	"Some ", ["operator", ">>"], " Task", ["punctuation", "."], "FromResult",
	["punctuation", ")"],

	["keyword", "type"], ["class-name", ["Base1"]], ["punctuation", "("], ["punctuation", ")"], ["operator", "="],
	["keyword", "abstract"], ["keyword", "member"], " F ", ["punctuation", ":"],
	["class-name", [
		"unit ", ["operator", "->"], " unit"]
	],
	["keyword", "default"], " u", ["punctuation", "."], ["function", "F"], ["punctuation", "("], ["punctuation", ")"],
	["operator", "="], "\n        printfn ", ["string", "\"F Base1\""],

	["keyword", "type"], ["class-name", ["Derived1"]], ["punctuation", "("], ["punctuation", ")"], ["operator", "="],
	["keyword", "inherit"], ["class-name", ["Base1"]], ["punctuation", "("], ["punctuation", ")"],
	["keyword", "override"], " u", ["punctuation", "."], ["function", "F"], ["punctuation", "("], ["punctuation", ")"], ["operator", "="],
	"\n        printfn ", ["string", "\"F Derived1\""],

	["keyword", "let"], " d1 ", ["punctuation", ":"], ["class-name", ["Derived1"]], ["operator", "="],
	["function", "Derived1"], ["punctuation", "("], ["punctuation", ")"],

	["keyword", "let"], " base1 ", ["operator", "="], " d1 ", ["operator", ":>"], ["class-name", ["Base1"]],

	["keyword", "let"], " derived1 ", ["operator", "="], " base1 ", ["operator", ":?>"], ["class-name", ["Derived1"]],

	["keyword", "type"], ["class-name", ["PersonName"]], ["operator", "="],
	["operator", "|"], " FirstOnly ", ["keyword", "of"], ["class-name", ["string"]],
	["operator", "|"], " LastOnly ", ["keyword", "of"], ["class-name", ["string"]],
	["operator", "|"], " FirstLast ", ["keyword", "of"], ["class-name", ["string ", ["operator", "*"], " string"]],

	["keyword", "type"], ["class-name", ["Shape"]], ["operator", "="],
	["operator", "|"], " Rectangle ", ["keyword", "of"],
	" height ", ["punctuation", ":"], ["class-name", ["float"]], ["operator", "*"],
	" width ", ["punctuation", ":"], ["class-name", ["float"]],
	["operator", "|"], " Circle ", ["keyword", "of"], " radius ", ["punctuation", ":"], ["class-name", ["float"]],

	["keyword", "type"], ["class-name", ["MyInterface"]], ["operator", "="],
	["keyword", "abstract"], ["keyword", "member"], " Add", ["punctuation", ":"],
	["class-name", ["int ", ["operator", "->"], " int ", ["operator", "->"], " int"]],
	["keyword", "abstract"], ["keyword", "member"], " Pi ", ["punctuation", ":"], ["class-name", ["float"]],

	["keyword", "exception"], ["class-name", ["Error1"]], ["keyword", "of"], ["class-name", ["string"]],

	["keyword", "exception"], ["class-name", ["Error2"]], ["keyword", "of"], ["class-name", ["string ", ["operator", "*"], " int"]]
]

----------------------------------------------------

Checks for class-names.
