Header menu logo Fabulous.AST

Discriminated Unions

Contents

Overview

Discriminated unions provide support for values that can be one of a number of named cases, possibly each with different values and types. They are useful for heterogeneous data, handling special cases (including valid and error cases), data that varies in type, and as an alternative to small object hierarchies. Recursive discriminated unions can represent tree data structures.

Basic Usage

Create a discriminated union with the Union widget:

#r "../../src/Fabulous.AST/bin/Release/netstandard2.1/publish/Fantomas.Core.dll"
#r "../../src/Fabulous.AST/bin/Release/netstandard2.1/publish/Fabulous.AST.dll"
#r "../../src/Fabulous.AST/bin/Release/netstandard2.1/publish/Fantomas.FCS.dll"

open Fabulous.AST
open type Fabulous.AST.Ast

Oak() {
    AnonymousModule() {
        Union("Color") {
            UnionCase("Red")
            UnionCase("Green")
            UnionCase("Blue")
        }
    }
}
|> Gen.mkOak
|> Gen.run
|> printfn "%s"

// produces the following code:
type Color =
    | Red
    | Green
    | Blue

Union Cases

Add cases to unions with the UnionCase widget. The option type is a simple discriminated union in the F# core library:

Oak() {
    AnonymousModule() {
        Union("Option") {
            UnionCase("Some", "'a")
            UnionCase("None")
        }
        |> _.typeParams(PostfixList("'a"))
    }
}
|> Gen.mkOak
|> Gen.run
|> printfn "%s"

// produces the following code:
type Option<'a> =
    | Some of 'a
    | None

Union Cases with Fields

Add fields to union cases, as in this Shape type example from the F# documentation:

Oak() {
    AnonymousModule() {
        Union("Shape") {
            UnionCase("Rectangle", [ Field("width", Float()); Field("length", Float()) ])
            UnionCase("Circle", Field("radius", Float()))
            UnionCase("Prism", [ Field("width", Float()); Field(Float()); Field("height", Float()) ])
        }
    }
}
|> Gen.mkOak
|> Gen.run
|> printfn "%s"

// produces the following code:
type Shape =
    | Rectangle of width: float * length: float
    | Circle of radius: float
    | Prism of width: float * float * height: float

Named and Anonymous Fields can be named or anonymous. In the previous example, most fields are named, but the second field of the Prism case is anonymous.

You construct objects by providing values for the named and anonymous fields:

// Using the Shape type from above
let rect = Rectangle(length = 1.3, width = 10.0)
let circ = Circle(1.0)
let prism = Prism(5.0, 2.0, height = 3.0)

In the Fabulous.AST construction, you can define fields with or without names:

Oak() {
    AnonymousModule() {
        Union("Shape") {
            // Named fields
            UnionCase("Rectangle", [ Field("width", Float()); Field("length", Float()) ])

            // Anonymous field
            UnionCase("Circle", Float())

            // Mixed named and anonymous fields
            UnionCase("Prism", [ Field("width", Float()); Field(Float()); Field("height", Float()) ])
        }
    }
}
|> Gen.mkOak
|> Gen.run
|> printfn "%s"

// produces the following code:
type Shape =
    | Rectangle of width: float * length: float
    | Circle of float
    | Prism of width: float * float * height: float

Type Parameters

Add type parameters to unions with the typeParams method, like in the option type:

Oak() {
    AnonymousModule() {
        Union("Option") {
            UnionCase("Some", "'a")
            UnionCase("None")
        }
        |> _.typeParams(PostfixList("'a"))
    }
}
|> Gen.mkOak
|> Gen.run
|> printfn "%s"

// produces the following code:
type Option<'a> =
    | Some of 'a
    | None

Union Attributes

Add attributes to unions with the attribute or attributes methods:

Oak() {
    AnonymousModule() {
        // Using the RequireQualifiedAccess attribute
        Union("CommandType") {
            UnionCase("Create")
            UnionCase("Update")
            UnionCase("Delete")
        }
        |> _.attribute(Attribute("RequireQualifiedAccess"))

        // Using the Struct attribute for value type unions
        Union("StructShape") {
            UnionCase("Circle", Float())
            UnionCase("Square", Float())
        }
        |> _.attribute(Attribute("Struct"))
    }
}
|> Gen.mkOak
|> Gen.run
|> printfn "%s"

// produces the following code:
[<RequireQualifiedAccess>]
type CommandType =
    | Create
    | Update
    | Delete

[<Struct>]
type StructShape =
    | Circle of float
    | Square of float

Access Modifiers

Set access modifiers for unions with the toPublic, toPrivate, and toInternal methods. By default, accessibility for discriminated unions is public.

Oak() {
    AnonymousModule() {
        Union("PublicUnion") {
            UnionCase("Case1")
            UnionCase("Case2")
        }
        |> _.toPublic()

        Union("PrivateUnion") {
            UnionCase("Case1")
            UnionCase("Case2")
        }
        |> _.toPrivate()
    }
}
|> Gen.mkOak
|> Gen.run
|> printfn "%s"

// produces the following code:
type PublicUnion =
    public
    | Case1
    | Case2

type PrivateUnion =
    private
    | Case1
    | Case2

XML Documentation

Add XML documentation to unions with the xmlDocs method:

Oak() {
    AnonymousModule() {
        Union("DocumentedUnion") {
            UnionCase("Case1")
            UnionCase("Case2")
        }
        |> _.xmlDocs([ "A discriminated union with documentation" ])
    }
}
|> Gen.mkOak
|> Gen.run
|> printfn "%s"

// produces the following code:
/// A discriminated union with documentation
type DocumentedUnion =
    | Case1
    | Case2

Union Members

Add members to unions with the members method. This example shows a Shape type with an Area property:

Oak() {
    AnonymousModule() {
        (Union("Shape") {
            UnionCase("Circle", Field("radius", Float()))
            UnionCase("EquilateralTriangle", Field("side", Float()))
            UnionCase("Square", Field("side", Float()))
            UnionCase("Rectangle", [ Field("length", Float()); Field("width", Float()) ])
        })
            .members() {
            Member(
                "this.Area",
                MatchExpr(
                    "this",
                    [ MatchClauseExpr(
                          LongIdentPat("Circle", NamedPat("r")),
                          InfixAppExpr("Math.PI", "*", ParenExpr(InfixAppExpr("r", "*", "r")))
                      )
                      MatchClauseExpr(
                          LongIdentPat("EquilateralTriangle", [ NamedPat("s") ]),
                          InfixAppExpr(
                              InfixAppExpr("s", "*", "s"),
                              "*",
                              InfixAppExpr(AppExpr("sqrt", Float(3.0)), "/", Float(4.0))
                          )
                      )
                      MatchClauseExpr(LongIdentPat("Square", [ NamedPat("s") ]), InfixAppExpr("s", "*", "s"))

                      MatchClauseExpr(
                          LongIdentPat("Rectangle", ParenPat(TuplePat([ NamedPat("l"); NamedPat("w") ]))),
                          InfixAppExpr("l", "*", "w")
                      ) ]
                )
            )
        }
    }
}
|> Gen.mkOak
|> Gen.run
|> printfn "%s"

// produces the following code:
type Shape =
    | Circle of radius: float
    | EquilateralTriangle of side: float
    | Square of side: float
    | Rectangle of length: float * width: float

    member this.Area =
        match this with
        | Circle r -> Math.PI * (r * r)
        | EquilateralTriangle s -> s * s * sqrt 3.0 / 4.0
        | Square s -> s * s
        | Rectangle(l, w) -> l * w

Struct Unions

Create struct discriminated unions with the Struct attribute:

Oak() {
    AnonymousModule() {
        Union("SingleCase") { UnionCase("Case", String()) }
        |> _.attribute(Attribute("Struct"))

        Union("Multicase") {
            UnionCase("Case1", String())
            UnionCase("Case2", Int())
            UnionCase("Case3", "double")
        }
        |> _.attribute(Attribute("Struct"))
    }
}
|> Gen.mkOak
|> Gen.run
|> printfn "%s"

// produces the following code:
[<Struct>]
type SingleCase = Case of string

[<Struct>]
type Multicase =
    | Case1 of string
    | Case2 of int
    | Case3 of double

Using Unions Instead of Object Hierarchies

Discriminated unions can be used as a simpler alternative to small object hierarchies. Here's an example from the F# documentation:

Oak() {
    AnonymousModule() {
        Union("Shape") {
            UnionCase("Circle", Field("radius", Float()))
            UnionCase("Square", Field("side", Float()))
            UnionCase("Rectangle", [ Field("height", Float()); Field("width", Float()) ])
        }

        // Calculate area using pattern matching instead of virtual methods
        Function(
            "area",
            ParameterPat("shape"),
            MatchExpr(
                "shape",
                [ MatchClauseExpr(
                      LongIdentPat("Circle", [ NamedPat("r") ]),
                      InfixAppExpr("Math.PI", "*", ParenExpr(InfixAppExpr("r", "*", "r")))
                  )
                  MatchClauseExpr(LongIdentPat("Square", NamedPat("s")), InfixAppExpr("s", "*", "s"))
                  MatchClauseExpr(
                      LongIdentPat("Rectangle", ParenPat(TuplePat([ NamedPat("h"); NamedPat("w") ]))),
                      InfixAppExpr("h", "*", "w")
                  ) ]
            )
        )
    }
}
|> Gen.mkOak
|> Gen.run
|> printfn "%s"

// produces the following code:
type Shape =
    | Circle of radius: float
    | Square of side: float
    | Rectangle of height: float * width: float

let area shape =
    match shape with
    | Circle r -> Math.PI * (r * r)
    | Square s -> s * s
    | Rectangle(h, w) -> h * w

Tree Data Structures with Recursive Unions

Use recursive discriminated unions to create tree data structures. Here's the Expression example from the F# documentation:

Oak() {
    AnonymousModule() {
        Union("Expression") {
            UnionCase("Number", Int())
            UnionCase("Variable", String())

            UnionCase(
                "Add",
                [ Field("left", LongIdent("Expression"))
                  Field("right", LongIdent("Expression")) ]
            )

            UnionCase(
                "Multiply",
                [ Field("left", LongIdent("Expression"))
                  Field("right", LongIdent("Expression")) ]
            )
        }
        |> _.toRecursive()

        // Evaluates an expression with a given variable map
        Function(
            "evaluate",
            [ ParameterPat("expr"); ParameterPat("variables") ],
            MatchExpr(
                "expr",
                [ MatchClauseExpr(LongIdentPat("Number", NamedPat("n")), ConstantExpr "n")

                  MatchClauseExpr(
                      LongIdentPat("Variable", [ NamedPat("name") ]),
                      AppExpr("Map.find", [ "name"; "variables" ])
                  )

                  MatchClauseExpr(
                      LongIdentPat("Add", ParenPat(TuplePat([ NamedPat("left"); NamedPat("right") ]))),
                      InfixAppExpr(
                          AppExpr("evaluate", [ "left"; "variables" ]),
                          "+",
                          AppExpr("evaluate", [ "right"; "variables" ])
                      )
                  )
                  MatchClauseExpr(
                      LongIdentPat("Multiply", ParenPat(TuplePat([ NamedPat("left"); NamedPat("right") ]))),
                      InfixAppExpr(
                          AppExpr("evaluate", [ "left"; "variables" ]),
                          "*",
                          AppExpr("evaluate", [ "right"; "variables" ])
                      )
                  ) ]
            )
        )
    }
}
|> Gen.mkOak
|> Gen.run
|> printfn "%s"

// produces the following code:
and Expression =
    | Number of int
    | Variable of string
    | Add of left: Expression * right: Expression
    | Multiply of left: Expression * right: Expression

let evaluate expr variables =
    match expr with
    | Number n -> n
    | Variable name -> Map.find name variables
    | Add(left, right) -> evaluate left variables + evaluate right variables
    | Multiply(left, right) -> evaluate left variables * evaluate right variables

Mutually Recursive Unions

Discriminated unions in F# can be mutually recursive using the and keyword. Here's an example from the F# documentation:

Oak() {
    AnonymousModule() {
        Union("Expression") {
            UnionCase("Literal", Int())
            UnionCase("Variable", String())

            UnionCase(
                "Operation",
                [ Field("op", String())
                  Field("left", LongIdent("Expression"))
                  Field("right", LongIdent("Expression")) ]
            )
        }

        Union("Statement") {
            UnionCase("Assign", [ Field("var", String()); Field("value", LongIdent("Expression")) ])
            UnionCase("Sequence", [ Field("Statement", List()) ])

            UnionCase(
                "IfElse",
                [ Field("condition", LongIdent("Expression"))
                  Field("thenBranch", LongIdent("Statement"))
                  Field("elseBranch", LongIdent("Statement")) ]
            )
        }
        |> _.toRecursive()
    }
}
|> Gen.mkOak
|> Gen.run
|> printfn "%s"
// produces the following code:
type Expression =
    | Literal of int
    | Variable of string
    | Operation of op: string * left: Expression * right: Expression

and Statement =
    | Assign of var: string * value: Expression
    | Sequence of Statement: list
    | IfElse of condition: Expression * thenBranch: Statement * elseBranch: Statement

Unwrapping Union Cases

In F#, you can unwrap single-case unions easily:

Oak() {
    AnonymousModule() {
        // Define a single-case union
        Union("ShaderProgram") { UnionCase("ShaderProgram", Int()) }

        // Unwrap using pattern matching
        Function(
            "someFunctionUsingShaderProgram",
            [ ParameterPat("shaderProgram") ],
            MatchExpr(
                "shaderProgram",
                [ MatchClauseExpr(
                      LongIdentPat("ShaderProgram", NamedPat("id")),
                      // Use the unwrapped value
                      AppExpr("useShader", [ "id" ])
                  ) ]
            )
        )

        Function(
            "someFunctionUsingShaderProgram",
            [ ParameterPat("shaderProgram") ],
            CompExprBodyExpr(
                [ LetOrUseExpr(Value(ParenPat(LongIdentPat("ShaderProgram", "id")), "shaderProgram"))
                  OtherExpr(UnitExpr()) ]
            )
        )
    }
}
|> Gen.mkOak
|> Gen.run
|> printfn "%s"
// produces the following code:
type ShaderProgram = ShaderProgram of int

let someFunctionUsingShaderProgram shaderProgram =
    match shaderProgram with
    | ShaderProgram id -> useShader id

let someFunctionUsingShaderProgram shaderProgram =
    let (ShaderProgram id) = shaderProgram
    ()

Pattern Matching with Unions

Discriminated unions are powerful when combined with pattern matching. Here's the getShapeWidth example from the F# documentation:

Oak() {
    AnonymousModule() {
        Function(
            "getShapeWidth",
            [ ParameterPat("shape") ],
            MatchExpr(
                "shape",
                [ MatchClauseExpr(
                      NamePatPairsPat("Rectangle", [ NamePatPairPat("width", "w") ]),
                      LongIdentSetExpr("w", "w")
                  )
                  MatchClauseExpr(
                      NamePatPairsPat("Circle", [ NamePatPairPat("radius", "r") ]),
                      InfixAppExpr(Float(2.0), "*", ParenExpr(InfixAppExpr("r", "*", "r")))
                  )
                  MatchClauseExpr(
                      NamePatPairsPat("Prism", [ NamePatPairPat("width", "w") ]),
                      LongIdentSetExpr("w", "w")
                  ) ]
            )
        )
    }
}
|> Gen.mkOak
|> Gen.run
|> printfn "%s"
// produces the following code:
let getShapeWidth shape =
    match shape with
    | Rectangle(width = w) -> w <- w
    | Circle(radius = r) -> 2.0 * (r * r)
    | Prism(width = w) -> w <- w

Since F# 9, discriminated unions automatically expose .Is* properties:

Oak() {
    AnonymousModule() {
        Union("Contact") {
            UnionCase("Email", Field("address", String()))
            UnionCase("Phone", [ Field("countryCode", Int()); Field("number", String()) ])
        }

        Function("canSendEmailTo", ParameterPat("person"), OptVarExpr("person.contact.IsEmail"))
    }
}
|> Gen.mkOak
|> Gen.run
|> printfn "%s"
// produces the following code:
type Contact =
    | Email of address: string
    | Phone of countryCode: int * number: string

let canSendEmailTo person = person.contact.IsEmail
namespace Fabulous
namespace Fabulous.AST
type Ast = class end
Multiple items
static member Ast.Oak: unit -> CollectionBuilder<Fantomas.Core.SyntaxOak.Oak,'marker>

--------------------
module Oak from Fabulous.AST
static member Ast.AnonymousModule: unit -> CollectionBuilder<Fantomas.Core.SyntaxOak.ModuleOrNamespaceNode,Fantomas.Core.SyntaxOak.ModuleDecl>
Multiple items
static member Ast.Union: name: string -> CollectionBuilder<Fantomas.Core.SyntaxOak.TypeDefnUnionNode,Fantomas.Core.SyntaxOak.UnionCaseNode>

--------------------
module Union from Fabulous.AST
Multiple items
static member Ast.UnionCase: name: string * fields: (string * WidgetBuilder<Fantomas.Core.SyntaxOak.Type>) list -> WidgetBuilder<Fantomas.Core.SyntaxOak.UnionCaseNode>
static member Ast.UnionCase: name: string * fields: (string * string) list -> WidgetBuilder<Fantomas.Core.SyntaxOak.UnionCaseNode>
static member Ast.UnionCase: name: string * field: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.UnionCaseNode>
static member Ast.UnionCase: name: string * field: WidgetBuilder<Fantomas.Core.SyntaxOak.FieldNode> -> WidgetBuilder<Fantomas.Core.SyntaxOak.UnionCaseNode>
static member Ast.UnionCase: name: string * fields: string list -> WidgetBuilder<Fantomas.Core.SyntaxOak.UnionCaseNode>
static member Ast.UnionCase: name: string * field: WidgetBuilder<Fantomas.Core.SyntaxOak.Type> -> WidgetBuilder<Fantomas.Core.SyntaxOak.UnionCaseNode>
static member Ast.UnionCase: name: string * fields: WidgetBuilder<Fantomas.Core.SyntaxOak.Type> list -> WidgetBuilder<Fantomas.Core.SyntaxOak.UnionCaseNode>
static member Ast.UnionCase: name: string * fields: WidgetBuilder<Fantomas.Core.SyntaxOak.FieldNode> list -> WidgetBuilder<Fantomas.Core.SyntaxOak.UnionCaseNode>
static member Ast.UnionCase: name: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.UnionCaseNode>

--------------------
module UnionCase from Fabulous.AST
module Gen from Fabulous.AST
<summary> It takes the root of the widget tree and create the corresponding Fantomas node, and recursively creating all children nodes </summary>
val mkOak: root: WidgetBuilder<'node> -> 'node
val run: oak: Fantomas.Core.SyntaxOak.Oak -> string
val printfn: format: Printf.TextWriterFormat<'T> -> 'T
static member Ast.PostfixList: decls: string * constraints: WidgetBuilder<Fantomas.Core.SyntaxOak.TypeConstraint> -> WidgetBuilder<Fantomas.Core.SyntaxOak.TyparDecls>
static member Ast.PostfixList: decls: WidgetBuilder<Fantomas.Core.SyntaxOak.TyparDeclNode> * constraints: WidgetBuilder<Fantomas.Core.SyntaxOak.TypeConstraint> -> WidgetBuilder<Fantomas.Core.SyntaxOak.TyparDecls>
static member Ast.PostfixList: constraints: WidgetBuilder<Fantomas.Core.SyntaxOak.TypeConstraint> -> WidgetBuilder<Fantomas.Core.SyntaxOak.TyparDecls>
static member Ast.PostfixList: constraints: WidgetBuilder<Fantomas.Core.SyntaxOak.TypeConstraint> list -> WidgetBuilder<Fantomas.Core.SyntaxOak.TyparDecls>
static member Ast.PostfixList: decl: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.TyparDecls>
static member Ast.PostfixList: decl: WidgetBuilder<Fantomas.Core.SyntaxOak.TyparDeclNode> -> WidgetBuilder<Fantomas.Core.SyntaxOak.TyparDecls>
static member Ast.PostfixList: decls: string list -> WidgetBuilder<Fantomas.Core.SyntaxOak.TyparDecls>
static member Ast.PostfixList: decls: WidgetBuilder<Fantomas.Core.SyntaxOak.TyparDeclNode> list -> WidgetBuilder<Fantomas.Core.SyntaxOak.TyparDecls>
static member Ast.PostfixList: decls: string list * constraints: WidgetBuilder<Fantomas.Core.SyntaxOak.TypeConstraint> list -> WidgetBuilder<Fantomas.Core.SyntaxOak.TyparDecls>
static member Ast.PostfixList: decls: WidgetBuilder<Fantomas.Core.SyntaxOak.TyparDeclNode> list * constraints: WidgetBuilder<Fantomas.Core.SyntaxOak.TypeConstraint> list -> WidgetBuilder<Fantomas.Core.SyntaxOak.TyparDecls>
Multiple items
static member Ast.Field: name: string * fieldType: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.FieldNode>
static member Ast.Field: name: string * fieldType: WidgetBuilder<Fantomas.Core.SyntaxOak.Type> -> WidgetBuilder<Fantomas.Core.SyntaxOak.FieldNode>
static member Ast.Field: fieldType: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.FieldNode>
static member Ast.Field: fieldType: WidgetBuilder<Fantomas.Core.SyntaxOak.Type> -> WidgetBuilder<Fantomas.Core.SyntaxOak.FieldNode>

--------------------
module Field from Fabulous.AST
static member Ast.Float: value: float -> WidgetBuilder<Fantomas.Core.SyntaxOak.Constant>
static member Ast.Float: unit -> WidgetBuilder<Fantomas.Core.SyntaxOak.Type>
val rect: obj
val circ: obj
val prism: obj
static member Ast.Attribute: value: string * expr: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.AttributeNode>
static member Ast.Attribute: value: string * expr: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> -> WidgetBuilder<Fantomas.Core.SyntaxOak.AttributeNode>
static member Ast.Attribute: value: string * expr: WidgetBuilder<Fantomas.Core.SyntaxOak.Expr> -> WidgetBuilder<Fantomas.Core.SyntaxOak.AttributeNode>
static member Ast.Attribute: value: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.AttributeNode>
static member Ast.Member: name: string * body: string * returnType: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.BindingNode>
   (+0 other overloads)
static member Ast.Member: name: string * body: string * returnType: WidgetBuilder<Fantomas.Core.SyntaxOak.Type> -> WidgetBuilder<Fantomas.Core.SyntaxOak.BindingNode>
   (+0 other overloads)
static member Ast.Member: name: string * body: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.BindingNode>
   (+0 other overloads)
static member Ast.Member: name: string * body: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> * returnType: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.BindingNode>
   (+0 other overloads)
static member Ast.Member: name: string * body: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> * returnType: WidgetBuilder<Fantomas.Core.SyntaxOak.Type> -> WidgetBuilder<Fantomas.Core.SyntaxOak.BindingNode>
   (+0 other overloads)
static member Ast.Member: name: string * body: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> -> WidgetBuilder<Fantomas.Core.SyntaxOak.BindingNode>
   (+0 other overloads)
static member Ast.Member: name: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> * body: string * returnType: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.BindingNode>
   (+0 other overloads)
static member Ast.Member: name: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> * body: string * returnType: WidgetBuilder<Fantomas.Core.SyntaxOak.Type> -> WidgetBuilder<Fantomas.Core.SyntaxOak.BindingNode>
   (+0 other overloads)
static member Ast.Member: name: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> * body: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.BindingNode>
   (+0 other overloads)
static member Ast.Member: name: string * body: WidgetBuilder<Fantomas.Core.SyntaxOak.Expr> * returnType: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.BindingNode>
   (+0 other overloads)
static member Ast.MatchExpr: value: string * clause: WidgetBuilder<Fantomas.Core.SyntaxOak.MatchClauseNode> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
static member Ast.MatchExpr: value: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> * clause: WidgetBuilder<Fantomas.Core.SyntaxOak.MatchClauseNode> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
static member Ast.MatchExpr: value: WidgetBuilder<Fantomas.Core.SyntaxOak.Expr> * clause: WidgetBuilder<Fantomas.Core.SyntaxOak.MatchClauseNode> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
static member Ast.MatchExpr: value: string * clauses: WidgetBuilder<Fantomas.Core.SyntaxOak.MatchClauseNode> list -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
static member Ast.MatchExpr: value: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> * clauses: WidgetBuilder<Fantomas.Core.SyntaxOak.MatchClauseNode> list -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
static member Ast.MatchExpr: value: WidgetBuilder<Fantomas.Core.SyntaxOak.Expr> * clauses: WidgetBuilder<Fantomas.Core.SyntaxOak.MatchClauseNode> list -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
static member Ast.MatchClauseExpr: pattern: string * bodyExpr: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.MatchClauseNode>
   (+0 other overloads)
static member Ast.MatchClauseExpr: pattern: string * bodyExpr: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> -> WidgetBuilder<Fantomas.Core.SyntaxOak.MatchClauseNode>
   (+0 other overloads)
static member Ast.MatchClauseExpr: pattern: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> * bodyExpr: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> -> WidgetBuilder<Fantomas.Core.SyntaxOak.MatchClauseNode>
   (+0 other overloads)
static member Ast.MatchClauseExpr: pattern: WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern> * bodyExpr: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> -> WidgetBuilder<Fantomas.Core.SyntaxOak.MatchClauseNode>
   (+0 other overloads)
static member Ast.MatchClauseExpr: pattern: string * bodyExpr: WidgetBuilder<Fantomas.Core.SyntaxOak.Expr> -> WidgetBuilder<Fantomas.Core.SyntaxOak.MatchClauseNode>
   (+0 other overloads)
static member Ast.MatchClauseExpr: pattern: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> * bodyExpr: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.MatchClauseNode>
   (+0 other overloads)
static member Ast.MatchClauseExpr: pattern: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> * bodyExpr: WidgetBuilder<Fantomas.Core.SyntaxOak.Expr> -> WidgetBuilder<Fantomas.Core.SyntaxOak.MatchClauseNode>
   (+0 other overloads)
static member Ast.MatchClauseExpr: pattern: WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern> * bodyExpr: WidgetBuilder<Fantomas.Core.SyntaxOak.Expr> -> WidgetBuilder<Fantomas.Core.SyntaxOak.MatchClauseNode>
   (+0 other overloads)
static member Ast.MatchClauseExpr: pattern: string * whenExpr: string * bodyExpr: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.MatchClauseNode>
   (+0 other overloads)
static member Ast.MatchClauseExpr: pattern: string * whenExpr: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> * bodyExpr: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> -> WidgetBuilder<Fantomas.Core.SyntaxOak.MatchClauseNode>
   (+0 other overloads)
static member Ast.LongIdentPat: ident: string * pair: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern>
   (+0 other overloads)
static member Ast.LongIdentPat: ident: string * pairs: string list -> WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern>
   (+0 other overloads)
static member Ast.LongIdentPat: ident: string * pair: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern>
   (+0 other overloads)
static member Ast.LongIdentPat: ident: string * pairs: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> list -> WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern>
   (+0 other overloads)
static member Ast.LongIdentPat: ident: string * pair: WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern>
   (+0 other overloads)
static member Ast.LongIdentPat: ident: string * pairs: WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern> list -> WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern>
   (+0 other overloads)
static member Ast.LongIdentPat: pair: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern>
   (+0 other overloads)
static member Ast.LongIdentPat: pairs: string list -> WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern>
   (+0 other overloads)
static member Ast.LongIdentPat: pair: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern>
   (+0 other overloads)
static member Ast.LongIdentPat: pairs: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> list -> WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern>
   (+0 other overloads)
static member Ast.NamedPat: value: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern>
static member Ast.InfixAppExpr: lhs: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> * operator: string * rhs: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
static member Ast.InfixAppExpr: lhs: WidgetBuilder<Fantomas.Core.SyntaxOak.Expr> * operator: string * rhs: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
static member Ast.InfixAppExpr: lhs: string * operator: string * rhs: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
static member Ast.InfixAppExpr: lhs: string * operator: string * rhs: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
static member Ast.InfixAppExpr: lhs: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> * operator: string * rhs: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
static member Ast.InfixAppExpr: lhs: string * operator: string * rhs: WidgetBuilder<Fantomas.Core.SyntaxOak.Expr> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
static member Ast.InfixAppExpr: lhs: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> * operator: string * rhs: WidgetBuilder<Fantomas.Core.SyntaxOak.Expr> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
static member Ast.InfixAppExpr: lhs: WidgetBuilder<Fantomas.Core.SyntaxOak.Expr> * operator: string * rhs: WidgetBuilder<Fantomas.Core.SyntaxOak.Expr> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
Multiple items
static member Ast.ParenExpr: value: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
static member Ast.ParenExpr: value: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
static member Ast.ParenExpr: value: WidgetBuilder<Fantomas.Core.SyntaxOak.Expr> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>

--------------------
module ParenExpr from Fabulous.AST
static member Ast.AppExpr: name: string * item: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
   (+0 other overloads)
static member Ast.AppExpr: name: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> * item: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
   (+0 other overloads)
static member Ast.AppExpr: name: WidgetBuilder<Fantomas.Core.SyntaxOak.Expr> * item: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
   (+0 other overloads)
static member Ast.AppExpr: name: string * item: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
   (+0 other overloads)
static member Ast.AppExpr: name: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> * item: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
   (+0 other overloads)
static member Ast.AppExpr: name: WidgetBuilder<Fantomas.Core.SyntaxOak.Expr> * item: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
   (+0 other overloads)
static member Ast.AppExpr: name: string * item: WidgetBuilder<Fantomas.Core.SyntaxOak.Expr> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
   (+0 other overloads)
static member Ast.AppExpr: name: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> * item: WidgetBuilder<Fantomas.Core.SyntaxOak.Expr> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
   (+0 other overloads)
static member Ast.AppExpr: name: WidgetBuilder<Fantomas.Core.SyntaxOak.Expr> * item: WidgetBuilder<Fantomas.Core.SyntaxOak.Expr> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
   (+0 other overloads)
static member Ast.AppExpr: name: string * items: string list -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
   (+0 other overloads)
Multiple items
static member Ast.ParenPat: pat: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern>
static member Ast.ParenPat: pat: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern>
static member Ast.ParenPat: pat: WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern>

--------------------
module ParenPat from Fabulous.AST
Multiple items
static member Ast.TuplePat: values: string list -> WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern>
static member Ast.TuplePat: values: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> list -> WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern>
static member Ast.TuplePat: value: WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern> list -> WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern>

--------------------
module TuplePat from Fabulous.AST
Multiple items
static member Ast.String: value: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Constant>
static member Ast.String: value: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.Constant>
static member Ast.String: unit -> WidgetBuilder<Fantomas.Core.SyntaxOak.Type>

--------------------
module String from Fabulous.AST

--------------------
module String from Microsoft.FSharp.Core
static member Ast.Int: value: int -> WidgetBuilder<Fantomas.Core.SyntaxOak.Constant>
static member Ast.Int: unit -> WidgetBuilder<Fantomas.Core.SyntaxOak.Type>
static member Ast.Function: name: string * parameters: string * bodyExpr: string * returnType: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.BindingNode>
   (+0 other overloads)
static member Ast.Function: name: string * parameters: string * bodyExpr: string * returnType: WidgetBuilder<Fantomas.Core.SyntaxOak.Type> -> WidgetBuilder<Fantomas.Core.SyntaxOak.BindingNode>
   (+0 other overloads)
static member Ast.Function: name: string * parameters: string * bodyExpr: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.BindingNode>
   (+0 other overloads)
static member Ast.Function: name: string * parameters: string * bodyExpr: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> * returnType: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.BindingNode>
   (+0 other overloads)
static member Ast.Function: name: string * parameters: string * bodyExpr: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> * returnType: WidgetBuilder<Fantomas.Core.SyntaxOak.Type> -> WidgetBuilder<Fantomas.Core.SyntaxOak.BindingNode>
   (+0 other overloads)
static member Ast.Function: name: string * parameters: string * bodyExpr: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> -> WidgetBuilder<Fantomas.Core.SyntaxOak.BindingNode>
   (+0 other overloads)
static member Ast.Function: name: string * parameters: string * bodyExpr: WidgetBuilder<Fantomas.Core.SyntaxOak.Expr> * returnType: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.BindingNode>
   (+0 other overloads)
static member Ast.Function: name: string * parameters: string * bodyExpr: WidgetBuilder<Fantomas.Core.SyntaxOak.Expr> * returnType: WidgetBuilder<Fantomas.Core.SyntaxOak.Type> -> WidgetBuilder<Fantomas.Core.SyntaxOak.BindingNode>
   (+0 other overloads)
static member Ast.Function: name: string * parameters: string * bodyExpr: WidgetBuilder<Fantomas.Core.SyntaxOak.Expr> -> WidgetBuilder<Fantomas.Core.SyntaxOak.BindingNode>
   (+0 other overloads)
static member Ast.Function: name: string * parameters: WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern> * bodyExpr: string * returnType: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.BindingNode>
   (+0 other overloads)
static member Ast.ParameterPat: name: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern>
static member Ast.ParameterPat: name: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern>
static member Ast.ParameterPat: name: WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern>
static member Ast.ParameterPat: name: string * pType: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern>
static member Ast.ParameterPat: name: string * pType: WidgetBuilder<Fantomas.Core.SyntaxOak.Type> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern>
static member Ast.ParameterPat: name: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> * pType: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern>
static member Ast.ParameterPat: name: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> * pType: WidgetBuilder<Fantomas.Core.SyntaxOak.Type> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern>
static member Ast.ParameterPat: name: WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern> * pType: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern>
static member Ast.ParameterPat: name: WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern> * pType: WidgetBuilder<Fantomas.Core.SyntaxOak.Type> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern>
static member Ast.LongIdent: value: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.Type>
static member Ast.LongIdent: value: string list -> WidgetBuilder<Fantomas.Core.SyntaxOak.Type>
static member Ast.ConstantExpr: value: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
static member Ast.ConstantExpr: value: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
Multiple items
static member Ast.List: unit -> WidgetBuilder<Fantomas.Core.SyntaxOak.Type>

--------------------
module List from Fabulous.AST

--------------------
module List from Microsoft.FSharp.Collections

--------------------
type List<'T> = | op_Nil | op_ColonColon of Head: 'T * Tail: 'T list interface IReadOnlyList<'T> interface IReadOnlyCollection<'T> interface IEnumerable interface IEnumerable<'T> member GetReverseIndex: rank: int * offset: int -> int member GetSlice: startIndex: int option * endIndex: int option -> 'T list static member Cons: head: 'T * tail: 'T list -> 'T list member Head: 'T member IsEmpty: bool member Item: index: int -> 'T with get ...
static member Ast.CompExprBodyExpr: value: WidgetBuilder<Fantomas.Core.SyntaxOak.BindingNode> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
static member Ast.CompExprBodyExpr: values: WidgetBuilder<Fantomas.Core.SyntaxOak.BindingNode> list -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
static member Ast.CompExprBodyExpr: value: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
static member Ast.CompExprBodyExpr: values: string list -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
static member Ast.CompExprBodyExpr: value: WidgetBuilder<Fantomas.Core.SyntaxOak.Expr> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
static member Ast.CompExprBodyExpr: values: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> list -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
static member Ast.CompExprBodyExpr: values: WidgetBuilder<Fantomas.Core.SyntaxOak.Expr> list -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
static member Ast.CompExprBodyExpr: value: WidgetBuilder<Fantomas.Core.SyntaxOak.ComputationExpressionStatement> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
static member Ast.CompExprBodyExpr: values: WidgetBuilder<Fantomas.Core.SyntaxOak.ComputationExpressionStatement> list -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
static member Ast.LetOrUseExpr: value: WidgetBuilder<Fantomas.Core.SyntaxOak.BindingNode> -> WidgetBuilder<Fantomas.Core.SyntaxOak.ComputationExpressionStatement>
static member Ast.Value: name: string * value: string * returnType: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.BindingNode>
   (+0 other overloads)
static member Ast.Value: name: string * value: string * returnType: WidgetBuilder<Fantomas.Core.SyntaxOak.Type> -> WidgetBuilder<Fantomas.Core.SyntaxOak.BindingNode>
   (+0 other overloads)
static member Ast.Value: name: string * value: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.BindingNode>
   (+0 other overloads)
static member Ast.Value: name: string * value: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> * returnType: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.BindingNode>
   (+0 other overloads)
static member Ast.Value: name: string * value: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> * returnType: WidgetBuilder<Fantomas.Core.SyntaxOak.Type> -> WidgetBuilder<Fantomas.Core.SyntaxOak.BindingNode>
   (+0 other overloads)
static member Ast.Value: name: string * value: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> -> WidgetBuilder<Fantomas.Core.SyntaxOak.BindingNode>
   (+0 other overloads)
static member Ast.Value: name: string * value: WidgetBuilder<Fantomas.Core.SyntaxOak.Expr> * returnType: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.BindingNode>
   (+0 other overloads)
static member Ast.Value: name: string * value: WidgetBuilder<Fantomas.Core.SyntaxOak.Expr> * returnType: WidgetBuilder<Fantomas.Core.SyntaxOak.Type> -> WidgetBuilder<Fantomas.Core.SyntaxOak.BindingNode>
   (+0 other overloads)
static member Ast.Value: name: string * value: WidgetBuilder<Fantomas.Core.SyntaxOak.Expr> -> WidgetBuilder<Fantomas.Core.SyntaxOak.BindingNode>
   (+0 other overloads)
static member Ast.Value: name: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> * value: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> * returnType: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.BindingNode>
   (+0 other overloads)
static member Ast.OtherExpr: value: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.ComputationExpressionStatement>
static member Ast.OtherExpr: value: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> -> WidgetBuilder<Fantomas.Core.SyntaxOak.ComputationExpressionStatement>
static member Ast.OtherExpr: value: WidgetBuilder<Fantomas.Core.SyntaxOak.Expr> -> WidgetBuilder<Fantomas.Core.SyntaxOak.ComputationExpressionStatement>
static member Ast.UnitExpr: unit -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
static member Ast.NamePatPairsPat: ident: string * pairs: WidgetBuilder<Fantomas.Core.SyntaxOak.NamePatPair> list -> WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern>
static member Ast.NamePatPairPat: ident: string * pat: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.NamePatPair>
static member Ast.NamePatPairPat: ident: string * pat: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> -> WidgetBuilder<Fantomas.Core.SyntaxOak.NamePatPair>
static member Ast.NamePatPairPat: ident: string * pat: WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern> -> WidgetBuilder<Fantomas.Core.SyntaxOak.NamePatPair>
static member Ast.LongIdentSetExpr: identifier: string * value: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
static member Ast.LongIdentSetExpr: identifier: string * value: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
static member Ast.LongIdentSetExpr: identifier: string * value: WidgetBuilder<Fantomas.Core.SyntaxOak.Expr> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
static member Ast.OptVarExpr: value: string * isOptional: bool -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
static member Ast.OptVarExpr: value: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>

Type something to start searching.