Modified some of the syntax playground

This commit is contained in:
Greg Shuflin 2021-10-21 01:31:31 -07:00
parent f625b80d0c
commit 4a366fda30

View File

@ -6,36 +6,36 @@ fn main() {
} }
@annotations are with @- @annotations use the @ sigil
// variable expressions // variable expressions
var a: I32 = 20 //variable declaration works like Rust
const b: String = 20 let a: I32 = 20
let mut b: String = 20
there(); can(); be(); multiple(); statements(); per_line(); there(); can(); be(); multiple(); statements(); per_line();
//string interpolation //string interpolation
const yolo = "I have ${a + b} people in my house" // maybe
let yolo = "I have ${a + b} people in my house"
// let expressions ??? not sure if I want this // let expressions
let a = 10, b = 20, c = 30 in a + b + c let a = 10, b = 20, c = 30 in a + b + c
//list literal //list literal
const q = [1,2,3,4] let q = [1,2,3,4]
//lambda literal //lambda literal - uses haskell-ish syntax
q.map({|item| item * 100 }) q.map(\(item) { item * 100 })
fn yolo(a: MyType, b: YourType): ReturnType<Param1, Param2> { fn yolo(a: MyType, b: YourType): ReturnType<Param1, Param2> {
if a == 20 { if a == 20 {
return "early" return "early"
} }
var sex = 20
sex
} }
/* for/while loop topics */ /* for/while loop topics */
//TODO I can probably get away with having one of `for`, `while`
//infinite loop //infinite loop
while { while {
@ -59,7 +59,7 @@ fn main() {
//monadic decomposition //monadic decomposition
for { for {
a <- maybeInt(); a <- maybeInt();
s <- foo() s <- foo()
} return { } return {
a + s a + s
} //return type is Monad<return type of block> } //return type is Monad<return type of block>
@ -70,7 +70,7 @@ fn main() {
/* conditionals/pattern matching */ /* conditionals/pattern matching */
// "is" operator for "does this pattern match" // `is` functions as an operator asking "does this pattern match"
x is Some(t) // type bool x is Some(t) // type bool
@ -86,7 +86,7 @@ if x {
//syntax is, I guess, for <expr> <brace-block>, where <expr> is a bool, or a <arrow-expr> //syntax is, I guess, for <expr> <brace-block>, where <expr> is a bool, or a <arrow-expr>
// type level alises // type level alises
typealias <name> = <other type> #maybe thsi should be 'alias'? type alias <name> = <other type> #maybe thsi should be 'alias'?
/* /*
what if type A = B meant that you could had to create A's with A(B), but when you used A's the interface was exactly like B's? what if type A = B meant that you could had to create A's with A(B), but when you used A's the interface was exactly like B's?
@ -94,12 +94,12 @@ what if type A = B meant that you could had to create A's with A(B), but when yo
*/ */
//declaring types of all stripes //declaring types of all stripes
type MyData = { a: i32, b: String } type MyData = { a: i32, b: String } // shorthand special-case for `type MyData = MyData { a: i32, b: String }`
type MyType = MyType type MyType = MyType
type Option<a> = None | Some(a) type Option<a> = None | Some(a)
type Signal = Absence | SimplePresence(i32) | ComplexPresence {a: i32, b: MyCustomData} type Signal = Absence | SimplePresence(i32) | ComplexPresence {a: i32, b: MyCustomData}
//traits //traits TODO I probably want to rename this
trait Bashable { } trait Bashable { }
trait Luggable { trait Luggable {
@ -108,7 +108,7 @@ what if type A = B meant that you could had to create A's with A(B), but when yo
} }
// lambdas - maybe I want to use ruby-style (not rust style) syntax
// lambdas // e.g.
// ruby-style not rust-style // Also TODO Nix uses `X: Y: Z` for in its value-level syntax, why can't I?
const a: X -> Y -> Z = {|x,y| } let a: X -> Y -> Z = {|x,y| }