Guest User

Untitled

a guest
Oct 16th, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.93 KB | None | 0 0
  1. module FableApp
  2.  
  3. open Fable.Core
  4. open Fable.Core.JsInterop
  5. open Fable.Import
  6. open Fable.Import.Node
  7. open Fable.Import.ts
  8.  
  9. let makeFactorialFunction() =
  10. let functionName = ts.createIdentifier "factorial"
  11. let paramName = ts.createIdentifier "n"
  12.  
  13. let parameter =
  14. ts.createParameter(
  15. None, // decorators
  16. None, // modifiers
  17. None, // dotDotDotToken
  18. paramName |> BindingName.Case1 |> U2.Case2);
  19.  
  20. let condition =
  21. ts.createBinary(
  22. paramName,
  23. SyntaxKind.LessThanEqualsToken,
  24. ts.createLiteral(1))
  25.  
  26. let ifBody =
  27. ts.createBlock(
  28. [| ts.createReturn(ts.createLiteral(1)) |],
  29. true) // multiline
  30. let decrementedArg = ts.createBinary(paramName, SyntaxKind.MinusToken, ts.createLiteral(1))
  31.  
  32. let recurse =
  33. ts.createBinary(
  34. paramName,
  35. SyntaxKind.AsteriskToken,
  36. ts.createCall(functionName, None, [| decrementedArg |])); // typeArgs
  37. let statements: Statement array =
  38. [|
  39. ts.createIf(condition, ifBody)
  40. ts.createReturn(recurse)
  41. |]
  42.  
  43. ts.createFunctionDeclaration(
  44. None, // decorators
  45. Some [| ts.createToken(SyntaxKind.ExportKeyword) |], // modifiers
  46. None, // asteriskToken
  47. functionName |> U2.Case2 |> Some,
  48. None, // typeParameters
  49. [| parameter |],
  50. ts.createKeywordTypeNode(SyntaxKind.NumberKeyword) :> TypeNode |> Some, // returnType
  51. ts.createBlock(statements, true) |> Some // multiline
  52. )
  53.  
  54. let resultFile =
  55. ts.createSourceFile("someFileName.ts", "", ScriptTarget.Latest, false, ScriptKind.TS); // setParentNodes
  56.  
  57. let printerOptions = createEmpty<PrinterOptions>
  58. printerOptions.newLine <- Some NewLineKind.LineFeed
  59.  
  60. let printer = ts.createPrinter(printerOptions);
  61.  
  62. let result = printer.printNode(EmitHint.Unspecified, makeFactorialFunction(), resultFile);
  63.  
  64. printfn "%s" result
Add Comment
Please, Sign In to add comment