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 |
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:
|
static member Ast.Oak: unit -> CollectionBuilder<Fantomas.Core.SyntaxOak.Oak,'marker>
--------------------
module Oak from Fabulous.AST
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 * 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: unit -> WidgetBuilder<Fantomas.Core.SyntaxOak.Type>
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
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: 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: unit -> WidgetBuilder<Fantomas.Core.SyntaxOak.Type>
static member Ast.InterfaceWith: value: WidgetBuilder<Fantomas.Core.SyntaxOak.Type> -> CollectionBuilder<Fantomas.Core.SyntaxOak.MemberDefnInterfaceNode,Fantomas.Core.SyntaxOak.MemberDefn>
(+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)
(+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)
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.Constant: value: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.Constant>
--------------------
module Constant 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>