diff --git a/docs/overview.md b/docs/overview.md new file mode 100644 index 0000000..049e29b --- /dev/null +++ b/docs/overview.md @@ -0,0 +1,39 @@ +# Overview + +Concepts: + +- Primitives + - u8, i32, f32, bool, char + - lists, slice, fixed-length array builtin, matrices +- Control flow + - for, while, break +- Structs & tuples +- Let bindings +- `Ptr a` +- Pattern matching +- ADTs +- Mutability + - const by default? +- Functions +- Array syntax + - ranges `arr[1..]`, `arr[..3]` + - index `arr[4]` +- Stdlib + - string + - vec/dynarray + - hashtable + - option/result + +C-like with Roc syntax. +Start with interpreter. Output C later down the track + +```rust +let slice = &[u32]; + +[1,23,45,4,1] +let new_vec: Vec = iterator.iter_mut() + -> map(|x| *x = 100 ) -- allocs? + -> filter -- allocs? + -> filter -- allocs? + .collect() +``` \ No newline at end of file diff --git a/lib/omniflan.ml b/lib/omniflan.ml new file mode 100644 index 0000000..b79ddb4 --- /dev/null +++ b/lib/omniflan.ml @@ -0,0 +1,22 @@ + +type binary_opt = + | Add + | Subtract + | Multiply + | Divide + +type expr = + | Let of { name: string; bindee: expr } + | Binary of { lhs: expr; rhs: expr; operator: binary_opt } + | IfElse of { condition: expr } + +type builtin_type = + | I32 + | F32 + | Bool + | Char + +module Examples = struct + let let_bind_int = "let x = 10" + let let_bind_str = "let s = \"hello\" " +end \ No newline at end of file diff --git a/test/test_flon.ml b/test/test_flan.ml similarity index 100% rename from test/test_flon.ml rename to test/test_flan.ml