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", "="],

	"\r\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", "="],

	"\r\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.
