Header menu logo Fabulous.AST

Interfaces

Interfaces specify sets of related members that other classes implement.

For details on how the AST node works, please refer to the Fantomas Core documentation. See also official documentation for a comparison between the two.

Constructors

Constructors

Description

TypeDefn(name: string, parameters: WidgetBuilder)

Creates a TypeDefnRegularNode AST node with the specified name and parameters.

TypeDefn(name: string, constructor: WidgetBuilder)

Creates a TypeDefnRegularNode AST node with the specified name and constructor.

TypeDefn(name: string)

Creates a TypeDefnRegularNode AST node with the specified name.

Modifiers

Modifier

Description

toRecursive()

Adds a scalar indicating that the type definition is recursive.

toPrivate()

Sets the accessibility to the type definition to private.

toPublic()

Sets the accessibility of the type definition to public.

toInternal()

Sets the accessibility of the type definition to internal.

typeParams(typeParams: WidgetBuilder)

Adds type parameters to the type definition.

xmlDocs(xmlDocs: string list)

Adds XML documentation comments to the type definition.

attributes(attributes: WidgetBuilder list)

Adds multiple attributes to the type definition.

attribute(attribute: WidgetBuilder)

Adds a single attribute to the type definition.

#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() {
        TypeDefn("ISprintable") { AbstractMember("Print", [ ("format", Int()) ], Unit()) }
        |> _.triviaBefore(SingleLine("Interfaces specify sets of related members that other classes implement."))

        TypeDefn("INumericFSharp") { AbstractMember("Add", [ Int(); Int() ], Int()) }

        TypeDefn("INumericDotNet") { AbstractMember("Add", [ Int(); Int() ], Int(), true) }

        TypeDefn("SomeClass1", ParenPat(TuplePat([ ParameterPat("x", Int()); ParameterPat("y", Float()) ]))) {
            InterfaceWith("IPrintable") {
                Member("this.Print()", AppExpr("printfn", [ String("%d %f"); Constant("x"); Constant("y") ]))
            }
        }
    }
}
|> Gen.mkOak
|> Gen.run
|> printfn "%s"

// produces the following code:
// Interfaces specify sets of related members that other classes implement.
type ISprintable =
    abstract Print: format: int -> unit

type INumericFSharp =
    abstract Add: int -> int -> int

type INumericDotNet =
    abstract Add: int * int -> int

type SomeClass1(x: int, y: float) =
    interface IPrintable with
        member this.Print() = printfn "%d %f" x y
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>
static member Ast.TypeDefn: name: string -> CollectionBuilder<Fantomas.Core.SyntaxOak.TypeDefnRegularNode,Fantomas.Core.SyntaxOak.MemberDefn>
static member Ast.TypeDefn: name: string * constructor: WidgetBuilder<Fantomas.Core.SyntaxOak.ImplicitConstructorNode> -> CollectionBuilder<Fantomas.Core.SyntaxOak.TypeDefnRegularNode,Fantomas.Core.SyntaxOak.MemberDefn>
static member Ast.TypeDefn: name: string * constructor: WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern> -> CollectionBuilder<Fantomas.Core.SyntaxOak.TypeDefnRegularNode,Fantomas.Core.SyntaxOak.MemberDefn>
static member Ast.AbstractMember: identifier: string * parameters: (string * string) list * returnType: string * ?isTupled: bool -> WidgetBuilder<Fantomas.Core.SyntaxOak.MemberDefnAbstractSlotNode>
static member Ast.AbstractMember: identifier: string * parameters: (string * WidgetBuilder<Fantomas.Core.SyntaxOak.Type>) list * returnType: string * ?isTupled: bool -> WidgetBuilder<Fantomas.Core.SyntaxOak.MemberDefnAbstractSlotNode>
static member Ast.AbstractMember: identifier: string * parameters: (string * string) list * returnType: WidgetBuilder<Fantomas.Core.SyntaxOak.Type> * ?isTupled: bool -> WidgetBuilder<Fantomas.Core.SyntaxOak.MemberDefnAbstractSlotNode>
static member Ast.AbstractMember: identifier: string * parameters: (string * WidgetBuilder<Fantomas.Core.SyntaxOak.Type>) list * returnType: WidgetBuilder<Fantomas.Core.SyntaxOak.Type> * ?isTupled: bool -> WidgetBuilder<Fantomas.Core.SyntaxOak.MemberDefnAbstractSlotNode>
static member Ast.AbstractMember: identifier: string * parameters: string list * returnType: string * ?isTupled: bool -> WidgetBuilder<Fantomas.Core.SyntaxOak.MemberDefnAbstractSlotNode>
static member Ast.AbstractMember: identifier: string * parameters: WidgetBuilder<Fantomas.Core.SyntaxOak.Type> list * returnType: string * ?isTupled: bool -> WidgetBuilder<Fantomas.Core.SyntaxOak.MemberDefnAbstractSlotNode>
static member Ast.AbstractMember: identifier: string * parameters: string list * returnType: WidgetBuilder<Fantomas.Core.SyntaxOak.Type> * ?isTupled: bool -> WidgetBuilder<Fantomas.Core.SyntaxOak.MemberDefnAbstractSlotNode>
static member Ast.AbstractMember: identifier: string * parameters: WidgetBuilder<Fantomas.Core.SyntaxOak.Type> list * returnType: WidgetBuilder<Fantomas.Core.SyntaxOak.Type> * ?isTupled: bool -> WidgetBuilder<Fantomas.Core.SyntaxOak.MemberDefnAbstractSlotNode>
static member Ast.AbstractMember: identifier: string * returnType: string * ?hasGetter: bool * ?hasSetter: bool -> WidgetBuilder<Fantomas.Core.SyntaxOak.MemberDefnAbstractSlotNode>
static member Ast.AbstractMember: identifier: string * returnType: WidgetBuilder<Fantomas.Core.SyntaxOak.Type> * ?hasGetter: bool * ?hasSetter: bool -> WidgetBuilder<Fantomas.Core.SyntaxOak.MemberDefnAbstractSlotNode>
static member Ast.Int: value: int -> WidgetBuilder<Fantomas.Core.SyntaxOak.Constant>
static member Ast.Int: unit -> WidgetBuilder<Fantomas.Core.SyntaxOak.Type>
static member Ast.Unit: unit -> WidgetBuilder<Fantomas.Core.SyntaxOak.Type>
static member Ast.SingleLine: text: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.TriviaContent>
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
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.Float: value: float -> WidgetBuilder<Fantomas.Core.SyntaxOak.Constant>
static member Ast.Float: unit -> WidgetBuilder<Fantomas.Core.SyntaxOak.Type>
static member Ast.InterfaceWith: name: string -> CollectionBuilder<Fantomas.Core.SyntaxOak.MemberDefnInterfaceNode,Fantomas.Core.SyntaxOak.MemberDefn>
static member Ast.InterfaceWith: value: WidgetBuilder<Fantomas.Core.SyntaxOak.Type> -> CollectionBuilder<Fantomas.Core.SyntaxOak.MemberDefnInterfaceNode,Fantomas.Core.SyntaxOak.MemberDefn>
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.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.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
Multiple items
static member Ast.Constant: value: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.Constant>

--------------------
module Constant 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

Type something to start searching.