Exceptions
Contents
#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
Overview
ExceptionDefn declares a custom exception type. In its simplest form it takes
just a name.
Basic Usage
Oak() { AnonymousModule() { ExceptionDefn("ParseError") } }
|> Gen.mkOak
|> Gen.run
|> printfn "%s"
// produces the following code:
|
Exceptions with Fields
Carry data on the exception by passing a single Field, a list of fields, or a
list of type names:
Oak() {
AnonymousModule() {
ExceptionDefn("NotFound", Field("key", String()))
ExceptionDefn("ValidationError", [ Field("field", String()); Field("code", Int()) ])
ExceptionDefn("Failure", [ "string"; "int" ])
}
}
|> Gen.mkOak
|> Gen.run
|> printfn "%s"
// produces the following code:
|
Exception Members
Add members with .members():
Oak() {
AnonymousModule() {
ExceptionDefn("AppError", Field("message", String())).members() {
Member(ConstantPat(Constant("DefaultMessage")), ConstantExpr(String("unknown"))).toStatic()
}
}
}
|> Gen.mkOak
|> Gen.run
|> printfn "%s"
// produces the following code:
|
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.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.ExceptionDefn: value: string * parameters: (string * string) seq -> WidgetBuilder<Fantomas.Core.SyntaxOak.ModuleDecl>
static member Ast.ExceptionDefn: value: string * parameters: (string * WidgetBuilder<Fantomas.Core.SyntaxOak.Type>) seq -> WidgetBuilder<Fantomas.Core.SyntaxOak.ModuleDecl>
static member Ast.ExceptionDefn: value: string * parameter: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.ModuleDecl>
static member Ast.ExceptionDefn: value: string * parameters: string seq -> WidgetBuilder<Fantomas.Core.SyntaxOak.ModuleDecl>
static member Ast.ExceptionDefn: value: string * parameter: WidgetBuilder<Fantomas.Core.SyntaxOak.Type> -> WidgetBuilder<Fantomas.Core.SyntaxOak.ModuleDecl>
static member Ast.ExceptionDefn: value: string * parameters: WidgetBuilder<Fantomas.Core.SyntaxOak.Type> seq -> WidgetBuilder<Fantomas.Core.SyntaxOak.ModuleDecl>
static member Ast.ExceptionDefn: value: string * parameter: WidgetBuilder<Fantomas.Core.SyntaxOak.FieldNode> -> WidgetBuilder<Fantomas.Core.SyntaxOak.ModuleDecl>
static member Ast.ExceptionDefn: value: string * parameters: WidgetBuilder<Fantomas.Core.SyntaxOak.FieldNode> seq -> WidgetBuilder<Fantomas.Core.SyntaxOak.ModuleDecl>
static member Ast.ExceptionDefn: value: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.ModuleDecl>
static member Ast.ExceptionDefn: value: WidgetBuilder<Fantomas.Core.SyntaxOak.UnionCaseNode> -> WidgetBuilder<Fantomas.Core.SyntaxOak.ModuleDecl>
--------------------
module ExceptionDefn from Fabulous.AST
static member Ast.ExceptionDefn: value: string * parameters: (string * string) seq -> WidgetBuilder<Fantomas.Core.SyntaxOak.ModuleDecl>
static member Ast.ExceptionDefn: value: string * parameters: (string * WidgetBuilder<Fantomas.Core.SyntaxOak.Type>) seq -> WidgetBuilder<Fantomas.Core.SyntaxOak.ModuleDecl>
static member Ast.ExceptionDefn: value: string * parameter: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.ModuleDecl>
static member Ast.ExceptionDefn: value: string * parameters: string seq -> WidgetBuilder<Fantomas.Core.SyntaxOak.ModuleDecl>
static member Ast.ExceptionDefn: value: string * parameter: WidgetBuilder<Fantomas.Core.SyntaxOak.Type> -> WidgetBuilder<Fantomas.Core.SyntaxOak.ModuleDecl>
static member Ast.ExceptionDefn: value: string * parameters: WidgetBuilder<Fantomas.Core.SyntaxOak.Type> seq -> WidgetBuilder<Fantomas.Core.SyntaxOak.ModuleDecl>
static member Ast.ExceptionDefn: value: string * parameter: WidgetBuilder<Fantomas.Core.SyntaxOak.FieldNode> -> WidgetBuilder<Fantomas.Core.SyntaxOak.ModuleDecl>
static member Ast.ExceptionDefn: value: string * parameters: WidgetBuilder<Fantomas.Core.SyntaxOak.FieldNode> seq -> WidgetBuilder<Fantomas.Core.SyntaxOak.ModuleDecl>
static member Ast.ExceptionDefn: value: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.ModuleDecl>
static member Ast.ExceptionDefn: value: WidgetBuilder<Fantomas.Core.SyntaxOak.UnionCaseNode> -> WidgetBuilder<Fantomas.Core.SyntaxOak.ModuleDecl>
--------------------
module ExceptionDefn from Fabulous.AST
type Gen =
static member mkOak: root: WidgetBuilder<'node> -> 'node
static member parse: source: string -> string + 1 overload
static member run: oak: Oak -> string + 1 overload
<summary> Renders a widget tree to F# source and verifies the result. <c>mkOak</c> turns the root widget into a Fantomas node (recursively building its children), <c>run</c> formats that node to source (optionally with a config), and <c>parse</c> round-trips the source back through the parser to confirm it is syntactically valid. Designed for pipeline use, e.g. <c>widget |> Gen.parse</c> or <c>widget |> Gen.mkOak |> Gen.run |> Gen.parse</c>. </summary>
<summary> Renders a widget tree to F# source and verifies the result. <c>mkOak</c> turns the root widget into a Fantomas node (recursively building its children), <c>run</c> formats that node to source (optionally with a config), and <c>parse</c> round-trips the source back through the parser to confirm it is syntactically valid. Designed for pipeline use, e.g. <c>widget |> Gen.parse</c> or <c>widget |> Gen.mkOak |> Gen.run |> Gen.parse</c>. </summary>
static member Gen.mkOak: root: WidgetBuilder<'node> -> 'node
static member Gen.run: oak: Fantomas.Core.SyntaxOak.Oak -> string
static member Gen.run: oak: Fantomas.Core.SyntaxOak.Oak * config: Fantomas.Core.FormatConfig -> string
static member Gen.run: oak: Fantomas.Core.SyntaxOak.Oak * config: Fantomas.Core.FormatConfig -> string
val printfn: format: Printf.TextWriterFormat<'T> -> 'T
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.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
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.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.Int: unit -> WidgetBuilder<Fantomas.Core.SyntaxOak.Type>
static member Ast.Member: name: string * body: string * returnType: string -> WidgetBuilder<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.MemberDefn>
(+0 other overloads)
static member Ast.Member: name: string * body: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.MemberDefn>
(+0 other overloads)
static member Ast.Member: name: string * body: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> * returnType: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.MemberDefn>
(+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.MemberDefn>
(+0 other overloads)
static member Ast.Member: name: string * body: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> -> WidgetBuilder<Fantomas.Core.SyntaxOak.MemberDefn>
(+0 other overloads)
static member Ast.Member: name: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> * body: string * returnType: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.MemberDefn>
(+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.MemberDefn>
(+0 other overloads)
static member Ast.Member: name: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> * body: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.MemberDefn>
(+0 other overloads)
static member Ast.Member: name: string * body: WidgetBuilder<Fantomas.Core.SyntaxOak.Expr> * returnType: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.MemberDefn>
(+0 other overloads)
(+0 other overloads)
static member Ast.Member: name: string * body: string * returnType: WidgetBuilder<Fantomas.Core.SyntaxOak.Type> -> WidgetBuilder<Fantomas.Core.SyntaxOak.MemberDefn>
(+0 other overloads)
static member Ast.Member: name: string * body: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.MemberDefn>
(+0 other overloads)
static member Ast.Member: name: string * body: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> * returnType: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.MemberDefn>
(+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.MemberDefn>
(+0 other overloads)
static member Ast.Member: name: string * body: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> -> WidgetBuilder<Fantomas.Core.SyntaxOak.MemberDefn>
(+0 other overloads)
static member Ast.Member: name: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> * body: string * returnType: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.MemberDefn>
(+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.MemberDefn>
(+0 other overloads)
static member Ast.Member: name: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> * body: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.MemberDefn>
(+0 other overloads)
static member Ast.Member: name: string * body: WidgetBuilder<Fantomas.Core.SyntaxOak.Expr> * returnType: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.MemberDefn>
(+0 other overloads)
static member Ast.ConstantPat: value: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern>
static member Ast.ConstantPat: value: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern>
static member Ast.ConstantPat: value: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Pattern>
Multiple items
static member Ast.Constant: value: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.Constant>
--------------------
module Constant from Fabulous.AST
static member Ast.Constant: value: string -> WidgetBuilder<Fantomas.Core.SyntaxOak.Constant>
--------------------
module Constant from Fabulous.AST
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>
static member Ast.ConstantExpr: value: WidgetBuilder<Fantomas.Core.SyntaxOak.Constant> -> WidgetBuilder<Fantomas.Core.SyntaxOak.Expr>
Fabulous.AST