From b732e418cb4c2e30f62a6c69111774651d69cc4e Mon Sep 17 00:00:00 2001 From: Sam Vervaeck Date: Mon, 15 Jan 2024 13:57:38 +0100 Subject: [PATCH] Update examples in README.md --- README.md | 62 +++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 56 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 8610ffd4a..52bd5bf8f 100644 --- a/README.md +++ b/README.md @@ -27,16 +27,66 @@ nice goodies, including: _Note that these examples are stil in the design phase and not able to compile._ -```ocaml -import "html" ( HtmlComponent ) +Here are some records we define in Bolt: -let app : HtmlComponent. +``` +struct Dog. + name: String + age: i32 - let { fullname, .. } = perform get_app_state +let spike = Dog { + name = "Spike", + age = 5 + } + +# Shorthand +let sadie = Dog "Sadie" 12 + +print f"Hey look! {spike.name} and {sadie.name} are playing together!" +``` + +Records are _extensible_, meaning that you can do things like this: + +``` +let greet { name, .. } = print f"Hello, {name}!" + +greet sadie +greet spike +greet { name = "Sam", company = "Accelera" } +``` + +Bolt will also support traits/type classes, like in Rust and Haskell: + +``` +trait Shout. + let shout : String + +impl Shout for Dog. + let shout = "Bark, bark!" + +# Imagine somewhere in another library Cat is defined ... + +impl Shout for Cat. + let shout = "Miau! Miau!" +``` + +Here's an example of a [React](https://react.dev/)-like framework in Bolt: + +_Note that this example is very experimental._ + +``` +import "html" ( Html ) + +let app : Html. + + let user = perform get_state return match user. - None => h1 [ "Please log in." ] - Some({ fullname, .. }) => + None => do. + Future.when_done (fetch "/api/login") \data -> do. + perform set_state data + h1 [ "Please log in." ] + Some { name, .. } => h1 [ f"Welcome Back, {fullname}" ] ``` ## Core Principles