Skip to content

Commit c1fcb67

Browse files
committed
fix loading references
1 parent 2107ab6 commit c1fcb67

6 files changed

Lines changed: 117 additions & 33 deletions

File tree

eyg/src/eyg/runtime/interpreter/block.gleam

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ fn loop(next, env) {
1111
state.Loop(c, e, k) -> {
1212
// update top env
1313
case c, k {
14-
state.V(v), state.Stack(state.Assign(l, _then, env), _, state.Empty(_))
14+
state.V(_v), state.Stack(state.Assign(l, _then, env), _, state.Empty(_))
1515
if l == special
1616
-> {
1717
loop(state.step(c, e, k), env.scope)

eyg/src/eyg/shell/examples.gleam

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,23 @@ pub fn catfact_fetch() {
77
decode.from_json(
88
// "{\"0\":\"l\",\"l\":\"request\",\"v\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"get\"},\"a\":{\"0\":\"v\",\"l\":\"http\"}},\"a\":{\"0\":\"s\",\"v\":\"catfact.ninja\"}},\"a\":{\"0\":\"s\",\"v\":\"/fact\"}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"t\",\"l\":\"None\"},\"a\":{\"0\":\"u\"}}},\"t\":{\"0\":\"l\",\"l\":\"response\",\"v\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"m\",\"l\":\"Ok\"},\"a\":{\"0\":\"f\",\"l\":\"$\",\"b\":{\"0\":\"l\",\"l\":\"body\",\"v\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"body\"},\"a\":{\"0\":\"v\",\"l\":\"$\"}},\"t\":{\"0\":\"v\",\"l\":\"body\"}}}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"m\",\"l\":\"Error\"},\"a\":{\"0\":\"f\",\"l\":\"_\",\"b\":{\"0\":\"a\",\"f\":{\"0\":\"p\",\"l\":\"Abort\"},\"a\":{\"0\":\"s\",\"v\":\"No response\"}}}},\"a\":{\"0\":\"n\"}}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"p\",\"l\":\"Fetch\"},\"a\":{\"0\":\"v\",\"l\":\"request\"}}},\"t\":{\"0\":\"z\",\"c\":\"\"}}}",
99
// "{\"0\":\"l\",\"l\":\"request\",\"v\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"get\"},\"a\":{\"0\":\"v\",\"l\":\"http\"}},\"a\":{\"0\":\"s\",\"v\":\"catfact.ninja\"}},\"a\":{\"0\":\"s\",\"v\":\"/fact\"}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"t\",\"l\":\"None\"},\"a\":{\"0\":\"u\"}}},\"t\":{\"0\":\"l\",\"l\":\"body\",\"v\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"m\",\"l\":\"Ok\"},\"a\":{\"0\":\"f\",\"l\":\"$\",\"b\":{\"0\":\"l\",\"l\":\"body\",\"v\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"body\"},\"a\":{\"0\":\"v\",\"l\":\"$\"}},\"t\":{\"0\":\"v\",\"l\":\"body\"}}}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"m\",\"l\":\"Error\"},\"a\":{\"0\":\"f\",\"l\":\"_\",\"b\":{\"0\":\"a\",\"f\":{\"0\":\"p\",\"l\":\"Abort\"},\"a\":{\"0\":\"s\",\"v\":\"No response\"}}}},\"a\":{\"0\":\"n\"}}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"p\",\"l\":\"Fetch\"},\"a\":{\"0\":\"v\",\"l\":\"request\"}}},\"t\":{\"0\":\"l\",\"l\":\"json\",\"v\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"m\",\"l\":\"Ok\"},\"a\":{\"0\":\"f\",\"l\":\"json\",\"b\":{\"0\":\"v\",\"l\":\"json\"}}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"m\",\"l\":\"Error\"},\"a\":{\"0\":\"f\",\"l\":\"_\",\"b\":{\"0\":\"z\",\"c\":\"\"}}},\"a\":{\"0\":\"n\"}}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"b\",\"l\":\"binary_to_string\"},\"a\":{\"0\":\"v\",\"l\":\"body\"}}},\"t\":{\"0\":\"z\",\"c\":\"\"}}}}",
10-
"{\"0\":\"l\",\"l\":\"request\",\"v\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"get\"},\"a\":{\"0\":\"v\",\"l\":\"http\"}},\"a\":{\"0\":\"s\",\"v\":\"catfact.ninja\"}},\"a\":{\"0\":\"s\",\"v\":\"/fact\"}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"t\",\"l\":\"None\"},\"a\":{\"0\":\"u\"}}},\"t\":{\"0\":\"l\",\"l\":\"body\",\"v\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"m\",\"l\":\"Ok\"},\"a\":{\"0\":\"f\",\"l\":\"$\",\"b\":{\"0\":\"l\",\"l\":\"body\",\"v\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"body\"},\"a\":{\"0\":\"v\",\"l\":\"$\"}},\"t\":{\"0\":\"v\",\"l\":\"body\"}}}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"m\",\"l\":\"Error\"},\"a\":{\"0\":\"f\",\"l\":\"_\",\"b\":{\"0\":\"a\",\"f\":{\"0\":\"p\",\"l\":\"Abort\"},\"a\":{\"0\":\"s\",\"v\":\"No response\"}}}},\"a\":{\"0\":\"n\"}}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"p\",\"l\":\"Fetch\"},\"a\":{\"0\":\"v\",\"l\":\"request\"}}},\"t\":{\"0\":\"l\",\"l\":\"decoder\",\"v\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"object\"},\"a\":{\"0\":\"v\",\"l\":\"json\"}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"field\"},\"a\":{\"0\":\"v\",\"l\":\"json\"}},\"a\":{\"0\":\"s\",\"v\":\"fact\"}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"string\"},\"a\":{\"0\":\"v\",\"l\":\"json\"}}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"done\"},\"a\":{\"0\":\"v\",\"l\":\"json\"}}}},\"a\":{\"0\":\"f\",\"l\":\"x\",\"b\":{\"0\":\"v\",\"l\":\"x\"}}},\"t\":{\"0\":\"l\",\"l\":\"fact\",\"v\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"m\",\"l\":\"Ok\"},\"a\":{\"0\":\"f\",\"l\":\"json\",\"b\":{\"0\":\"v\",\"l\":\"json\"}}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"m\",\"l\":\"Error\"},\"a\":{\"0\":\"f\",\"l\":\"_\",\"b\":{\"0\":\"z\",\"c\":\"\"}}},\"a\":{\"0\":\"n\"}}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"parse_bytes\"},\"a\":{\"0\":\"v\",\"l\":\"json\"}},\"a\":{\"0\":\"v\",\"l\":\"decoder\"}},\"a\":{\"0\":\"v\",\"l\":\"body\"}}},\"t\":{\"0\":\"z\",\"c\":\"\"}}}}}",
10+
// "{\"0\":\"l\",\"l\":\"request\",\"v\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"get\"},\"a\":{\"0\":\"v\",\"l\":\"http\"}},\"a\":{\"0\":\"s\",\"v\":\"catfact.ninja\"}},\"a\":{\"0\":\"s\",\"v\":\"/fact\"}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"t\",\"l\":\"None\"},\"a\":{\"0\":\"u\"}}},\"t\":{\"0\":\"l\",\"l\":\"body\",\"v\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"m\",\"l\":\"Ok\"},\"a\":{\"0\":\"f\",\"l\":\"$\",\"b\":{\"0\":\"l\",\"l\":\"body\",\"v\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"body\"},\"a\":{\"0\":\"v\",\"l\":\"$\"}},\"t\":{\"0\":\"v\",\"l\":\"body\"}}}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"m\",\"l\":\"Error\"},\"a\":{\"0\":\"f\",\"l\":\"_\",\"b\":{\"0\":\"a\",\"f\":{\"0\":\"p\",\"l\":\"Abort\"},\"a\":{\"0\":\"s\",\"v\":\"No response\"}}}},\"a\":{\"0\":\"n\"}}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"p\",\"l\":\"Fetch\"},\"a\":{\"0\":\"v\",\"l\":\"request\"}}},\"t\":{\"0\":\"l\",\"l\":\"decoder\",\"v\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"object\"},\"a\":{\"0\":\"v\",\"l\":\"json\"}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"field\"},\"a\":{\"0\":\"v\",\"l\":\"json\"}},\"a\":{\"0\":\"s\",\"v\":\"fact\"}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"string\"},\"a\":{\"0\":\"v\",\"l\":\"json\"}}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"done\"},\"a\":{\"0\":\"v\",\"l\":\"json\"}}}},\"a\":{\"0\":\"f\",\"l\":\"x\",\"b\":{\"0\":\"v\",\"l\":\"x\"}}},\"t\":{\"0\":\"l\",\"l\":\"fact\",\"v\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"m\",\"l\":\"Ok\"},\"a\":{\"0\":\"f\",\"l\":\"json\",\"b\":{\"0\":\"v\",\"l\":\"json\"}}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"m\",\"l\":\"Error\"},\"a\":{\"0\":\"f\",\"l\":\"_\",\"b\":{\"0\":\"z\",\"c\":\"\"}}},\"a\":{\"0\":\"n\"}}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"parse_bytes\"},\"a\":{\"0\":\"v\",\"l\":\"json\"}},\"a\":{\"0\":\"v\",\"l\":\"decoder\"}},\"a\":{\"0\":\"v\",\"l\":\"body\"}}},\"t\":{\"0\":\"z\",\"c\":\"\"}}}}}",
11+
"{\"0\":\"l\",\"l\":\"$\",\"v\":{\"0\":\"@\",\"p\":\"std\",\"r\":2},\"t\":{\"0\":\"l\",\"l\":\"http\",\"v\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"http\"},\"a\":{\"0\":\"v\",\"l\":\"$\"}},\"t\":{\"0\":\"l\",\"l\":\"$\",\"v\":{\"0\":\"@\",\"p\":\"crowdhailer\",\"r\":1},\"t\":{\"0\":\"l\",\"l\":\"j\",\"v\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"json\"},\"a\":{\"0\":\"v\",\"l\":\"$\"}},\"t\":{\"0\":\"l\",\"l\":\"request\",\"v\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"get\"},\"a\":{\"0\":\"v\",\"l\":\"http\"}},\"a\":{\"0\":\"s\",\"v\":\"catfact.ninja\"}},\"a\":{\"0\":\"s\",\"v\":\"/fact\"}},\"t\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"m\",\"l\":\"Ok\"},\"a\":{\"0\":\"f\",\"l\":\"$\",\"b\":{\"0\":\"l\",\"l\":\"body\",\"v\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"body\"},\"a\":{\"0\":\"v\",\"l\":\"$\"}},\"t\":{\"0\":\"l\",\"l\":\"parser\",\"v\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"object\"},\"a\":{\"0\":\"v\",\"l\":\"j\"}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"field\"},\"a\":{\"0\":\"v\",\"l\":\"j\"}},\"a\":{\"0\":\"s\",\"v\":\"fact\"}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"string\"},\"a\":{\"0\":\"v\",\"l\":\"j\"}}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"done\"},\"a\":{\"0\":\"v\",\"l\":\"j\"}}}},\"a\":{\"0\":\"f\",\"l\":\"x\",\"b\":{\"0\":\"v\",\"l\":\"x\"}}},\"t\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"parse_bytes\"},\"a\":{\"0\":\"v\",\"l\":\"j\"}},\"a\":{\"0\":\"v\",\"l\":\"parser\"}},\"a\":{\"0\":\"v\",\"l\":\"body\"}}}}}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"m\",\"l\":\"Error\"},\"a\":{\"0\":\"f\",\"l\":\"_\",\"b\":{\"0\":\"a\",\"f\":{\"0\":\"t\",\"l\":\"Error\"},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"t\",\"l\":\"FailedToFetch\"},\"a\":{\"0\":\"u\"}}}}},\"a\":{\"0\":\"n\"}}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"p\",\"l\":\"Fetch\"},\"a\":{\"0\":\"v\",\"l\":\"request\"}}}}}}}}",
1112
)
1213
let source = editable.from_expression(source)
13-
let source = projection.focus_at(source, [0])
14+
// let source = projection.focus_at(source, [0])
1415
#(source, "fetch a random cat fact")
1516
}
1617

18+
// {"0":"l","l":"$","v":{"0":"@","p":"std","r":2},"t":{"0":"l","l":"http","v":{"0":"a","f":{"0":"g","l":"http"},"a":{"0":"v","l":"$"}},"t":{"0":"l","l":"$","v":{"0":"@","p":"crowdhailer","r":1},"t":{"0":"l","l":"j","v":{"0":"a","f":{"0":"g","l":"json"},"a":{"0":"v","l":"$"}},"t":{"0":"l","l":"request","v":{"0":"a","f":{"0":"a","f":{"0":"a","f":{"0":"g","l":"get"},"a":{"0":"v","l":"http"}},"a":{"0":"s","v":"catfact.ninja"}},"a":{"0":"s","v":"/fact"}},"t":{"0":"a","f":{"0":"a","f":{"0":"a","f":{"0":"m","l":"Ok"},"a":{"0":"f","l":"$","b":{"0":"l","l":"body","v":{"0":"a","f":{"0":"g","l":"body"},"a":{"0":"v","l":"$"}},"t":{"0":"l","l":"parser","v":{"0":"a","f":{"0":"a","f":{"0":"a","f":{"0":"g","l":"object"},"a":{"0":"v","l":"j"}},"a":{"0":"a","f":{"0":"a","f":{"0":"a","f":{"0":"a","f":{"0":"g","l":"field"},"a":{"0":"v","l":"j"}},"a":{"0":"s","v":"fact"}},"a":{"0":"a","f":{"0":"g","l":"string"},"a":{"0":"v","l":"j"}}},"a":{"0":"a","f":{"0":"g","l":"done"},"a":{"0":"v","l":"j"}}}},"a":{"0":"f","l":"x","b":{"0":"v","l":"x"}}},"t":{"0":"a","f":{"0":"a","f":{"0":"a","f":{"0":"g","l":"parse_bytes"},"a":{"0":"v","l":"j"}},"a":{"0":"v","l":"parser"}},"a":{"0":"v","l":"body"}}}}}},"a":{"0":"a","f":{"0":"a","f":{"0":"m","l":"Error"},"a":{"0":"f","l":"_","b":{"0":"a","f":{"0":"t","l":"Error"},"a":{"0":"a","f":{"0":"t","l":"FailedToFetch"},"a":{"0":"u"}}}}},"a":{"0":"n"}}},"a":{"0":"a","f":{"0":"p","l":"Fetch"},"a":{"0":"v","l":"request"}}}}}}}}
19+
1720
fn sunrise() {
1821
let assert Ok(source) =
1922
decode.from_json(
2023
"{\"0\":\"l\",\"l\":\"query\",\"v\":{\"0\":\"s\",\"v\":\"lat=36.7201600&lng=-4.4203400\"},\"t\":{\"0\":\"l\",\"l\":\"decoder\",\"v\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"object\"},\"a\":{\"0\":\"v\",\"l\":\"json\"}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"field\"},\"a\":{\"0\":\"v\",\"l\":\"json\"}},\"a\":{\"0\":\"s\",\"v\":\"results\"}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"object\"},\"a\":{\"0\":\"v\",\"l\":\"json\"}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"field\"},\"a\":{\"0\":\"v\",\"l\":\"json\"}},\"a\":{\"0\":\"s\",\"v\":\"sunrise\"}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"string\"},\"a\":{\"0\":\"v\",\"l\":\"json\"}}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"done\"},\"a\":{\"0\":\"v\",\"l\":\"json\"}}}},\"a\":{\"0\":\"f\",\"l\":\"x\",\"b\":{\"0\":\"v\",\"l\":\"x\"}}}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"done\"},\"a\":{\"0\":\"v\",\"l\":\"json\"}}}},\"a\":{\"0\":\"f\",\"l\":\"x\",\"b\":{\"0\":\"v\",\"l\":\"x\"}}},\"t\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"m\",\"l\":\"Ok\"},\"a\":{\"0\":\"f\",\"l\":\"$\",\"b\":{\"0\":\"l\",\"l\":\"body\",\"v\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"body\"},\"a\":{\"0\":\"v\",\"l\":\"$\"}},\"t\":{\"0\":\"l\",\"l\":\"status\",\"v\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"status\"},\"a\":{\"0\":\"v\",\"l\":\"$\"}},\"t\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"parse_bytes\"},\"a\":{\"0\":\"v\",\"l\":\"json\"}},\"a\":{\"0\":\"v\",\"l\":\"decoder\"}},\"a\":{\"0\":\"v\",\"l\":\"body\"}}}}}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"m\",\"l\":\"Error\"},\"a\":{\"0\":\"f\",\"l\":\"_\",\"b\":{\"0\":\"z\",\"c\":\"\"}}},\"a\":{\"0\":\"n\"}}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"p\",\"l\":\"Fetch\"},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"get\"},\"a\":{\"0\":\"v\",\"l\":\"http\"}},\"a\":{\"0\":\"s\",\"v\":\"api.sunrise-sunset.org\"}},\"a\":{\"0\":\"s\",\"v\":\"/json\"}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"t\",\"l\":\"Some\"},\"a\":{\"0\":\"v\",\"l\":\"query\"}}}}}}}",
2124
)
2225
let source = editable.from_expression(source)
23-
let source = projection.focus_at(source, [0])
26+
// let source = projection.focus_at(source, [0])
2427
#(source, "get your sunrise sunset time")
2528
}
2629

@@ -30,7 +33,7 @@ fn wordcount() {
3033
"{\"0\":\"l\",\"l\":\"expect\",\"v\":{\"0\":\"f\",\"l\":\"result\",\"b\":{\"0\":\"f\",\"l\":\"message\",\"b\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"m\",\"l\":\"Ok\"},\"a\":{\"0\":\"f\",\"l\":\"value\",\"b\":{\"0\":\"v\",\"l\":\"value\"}}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"m\",\"l\":\"Error\"},\"a\":{\"0\":\"f\",\"l\":\"_\",\"b\":{\"0\":\"a\",\"f\":{\"0\":\"p\",\"l\":\"Abort\"},\"a\":{\"0\":\"v\",\"l\":\"message\"}}}},\"a\":{\"0\":\"n\"}}},\"a\":{\"0\":\"v\",\"l\":\"result\"}}}},\"t\":{\"0\":\"l\",\"l\":\"bytes\",\"v\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"v\",\"l\":\"expect\"},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"p\",\"l\":\"File.Read\"},\"a\":{\"0\":\"s\",\"v\":\"tmp.md\"}}},\"a\":{\"0\":\"s\",\"v\":\"failed to read file\"}},\"t\":{\"0\":\"l\",\"l\":\"text\",\"v\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"v\",\"l\":\"expect\"},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"b\",\"l\":\"binary_to_string\"},\"a\":{\"0\":\"v\",\"l\":\"bytes\"}}},\"a\":{\"0\":\"s\",\"v\":\"not a text file\"}},\"t\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"length\"},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"list\"},\"a\":{\"0\":\"v\",\"l\":\"std\"}}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"tail\"},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"split\"},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"string\"},\"a\":{\"0\":\"v\",\"l\":\"std\"}}},\"a\":{\"0\":\"v\",\"l\":\"text\"}},\"a\":{\"0\":\"s\",\"v\":\" \"}}}}}}}",
3134
)
3235
let source = editable.from_expression(source)
33-
let source = projection.focus_at(source, [0])
36+
// let source = projection.focus_at(source, [0])
3437
#(source, "count words in a file")
3538
}
3639

@@ -40,10 +43,26 @@ fn deploy() {
4043
"{\"0\":\"l\",\"l\":\"files\",\"v\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"c\"},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"e\",\"l\":\"content\"},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"b\",\"l\":\"string_to_binary\"},\"a\":{\"0\":\"s\",\"v\":\"yo!\"}}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"e\",\"l\":\"name\"},\"a\":{\"0\":\"s\",\"v\":\"index.html\"}},\"a\":{\"0\":\"u\"}}}},\"a\":{\"0\":\"ta\"}},\"t\":{\"0\":\"a\",\"f\":{\"0\":\"p\",\"l\":\"Netlify.DeploySite\"},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"e\",\"l\":\"site\"},\"a\":{\"0\":\"s\",\"v\":\"4b271125-3f12-40a9-b4bc-ccf5e82879dd\"}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"e\",\"l\":\"files\"},\"a\":{\"0\":\"v\",\"l\":\"files\"}},\"a\":{\"0\":\"u\"}}}}}",
4144
)
4245
let source = editable.from_expression(source)
43-
let source = projection.focus_at(source, [0])
46+
// let source = projection.focus_at(source, [0])
4447
#(source, "deploy a page to netlify")
4548
}
4649

50+
fn fibonacci_numbers() {
51+
let assert Ok(source) =
52+
decode.from_json(
53+
"{\"0\":\"l\",\"l\":\"$\",\"v\":{\"0\":\"@\",\"p\":\"std\",\"r\":2},\"t\":{\"0\":\"l\",\"l\":\"integer\",\"v\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"integer\"},\"a\":{\"0\":\"v\",\"l\":\"$\"}},\"t\":{\"0\":\"l\",\"l\":\"fibonacci\",\"v\":{\"0\":\"a\",\"f\":{\"0\":\"b\",\"l\":\"fix\"},\"a\":{\"0\":\"f\",\"l\":\"fibonacci\",\"b\":{\"0\":\"f\",\"l\":\"acc\",\"b\":{\"0\":\"f\",\"l\":\"a\",\"b\":{\"0\":\"f\",\"l\":\"b\",\"b\":{\"0\":\"l\",\"l\":\"acc\",\"v\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"c\"},\"a\":{\"0\":\"v\",\"l\":\"a\"}},\"a\":{\"0\":\"v\",\"l\":\"acc\"}},\"t\":{\"0\":\"l\",\"l\":\"c\",\"v\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"add\"},\"a\":{\"0\":\"v\",\"l\":\"integer\"}},\"a\":{\"0\":\"v\",\"l\":\"a\"}},\"a\":{\"0\":\"v\",\"l\":\"b\"}},\"t\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"m\",\"l\":\"Lt\"},\"a\":{\"0\":\"f\",\"l\":\"_\",\"b\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"v\",\"l\":\"fibonacci\"},\"a\":{\"0\":\"v\",\"l\":\"acc\"}},\"a\":{\"0\":\"v\",\"l\":\"b\"}},\"a\":{\"0\":\"v\",\"l\":\"c\"}}}},\"a\":{\"0\":\"f\",\"l\":\"_\",\"b\":{\"0\":\"v\",\"l\":\"acc\"}}},\"a\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"g\",\"l\":\"compare\"},\"a\":{\"0\":\"v\",\"l\":\"integer\"}},\"a\":{\"0\":\"v\",\"l\":\"b\"}},\"a\":{\"0\":\"i\",\"v\":1000}}}}}}}}}},\"t\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"a\",\"f\":{\"0\":\"v\",\"l\":\"fibonacci\"},\"a\":{\"0\":\"ta\"}},\"a\":{\"0\":\"i\",\"v\":1}},\"a\":{\"0\":\"i\",\"v\":1}}}}}",
54+
)
55+
let source = editable.from_expression(source)
56+
// let source = projection.focus_at(source, [0])
57+
#(source, "calculate fibonacci numbers")
58+
}
59+
4760
pub fn examples() {
48-
[catfact_fetch(), wordcount(), deploy(), sunrise()]
61+
[
62+
fibonacci_numbers(),
63+
catfact_fetch(),
64+
// wordcount(),
65+
// deploy(),
66+
// sunrise(),
67+
]
4968
}

eyg/src/eyg/sync/sync.gleam

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -349,15 +349,41 @@ pub fn load(sync, dump: dump.Dump) {
349349
let packages = dict.merge(packages, dump.packages)
350350
// Can work out value of blobs eagerly and stick them in the map.
351351
// use the checksum as lookup key
352-
// TODO do topological ordering
353352
let loaded =
354353
list.fold(
355354
dump.fragments,
356355
sync.loaded,
357356
fn(loaded, fragment: supabase.Fragment) {
358-
io.debug(fragment.created_at)
357+
// List all references and then put them in the loaded map
358+
// This is bluring things a bit
359359
let expression = annotated.add_annotation(fragment.code, [])
360-
case compute(expression, loaded) {
360+
let named =
361+
annotated.list_named_references(expression)
362+
|> list.map(fn(ref) {
363+
let #(name, release) = ref
364+
case dict.get(registry, name) {
365+
Ok(package_id) ->
366+
case dict.get(packages, package_id) {
367+
Ok(releases) ->
368+
case dict.get(releases, release) {
369+
Ok(release) ->
370+
case dict.get(loaded, release.hash) {
371+
Ok(computed) -> #(
372+
"@" <> name <> ":" <> int.to_string(release.version),
373+
computed,
374+
)
375+
Error(Nil) -> panic as "computed should be done"
376+
}
377+
Error(Nil) -> panic as "release should be in history"
378+
}
379+
Error(Nil) ->
380+
panic as { "package should be in history " <> name }
381+
}
382+
Error(Nil) -> panic as { "name should be in registry " <> name }
383+
}
384+
})
385+
|> dict.from_list
386+
case compute(expression, dict.merge(loaded, named)) {
361387
Ok(computed) -> dict.insert(loaded, fragment.hash, computed)
362388
Error(reason) -> {
363389
io.debug(reason)

0 commit comments

Comments
 (0)