You can do something similar in F#. This creates a cross-platform desktop GUI.
#!/usr/bin/env -S dotnet fsi
#r "nuget: Avalonia, 11.0.0-preview4"
#r "nuget: Avalonia.Desktop, 11.0.0-preview4"
#r "nuget: Avalonia.Themes.Fluent, 11.0.0-preview4"
#r "nuget: JaggerJo.Avalonia.FuncUI, 0.6.0-preview4"
open Avalonia
open Avalonia.Controls
open Avalonia.Controls.ApplicationLifetimes
open Avalonia.FuncUI
open Avalonia.FuncUI.DSL
open Avalonia.FuncUI.Hosts
open Avalonia.Layout
open Avalonia.Themes.Fluent
open System
module Main =
let view =
Component(fun ctx ->
DockPanel.create
[ DockPanel.children
[ TextBlock.create
[ TextBlock.fontSize 48.0
TextBlock.verticalAlignment VerticalAlignment.Center
TextBlock.horizontalAlignment HorizontalAlignment.Center
TextBlock.text "Hello world!" ] ] ])
type MainWindow() =
inherit HostWindow()
do
base.Title <- "Hello World!"
base.Height <- 400.0
base.Width <- 400.0
base.Content <- Main.view
type App() =
inherit Application()
override this.Initialize() =
this.Styles.Add(FluentTheme(baseUri = null, Mode = FluentThemeMode.Dark))
override this.OnFrameworkInitializationCompleted() =
match this.ApplicationLifetime with
| :? IClassicDesktopStyleApplicationLifetime as desktopLifetime ->
let mainWindow = MainWindow()
desktopLifetime.MainWindow <- mainWindow
| _ -> ()
AppBuilder
.Configure<App>()
.UsePlatformDetect()
.UseSkia()
.StartWithClassicDesktopLifetime(Environment.GetCommandLineArgs())