Skip to content

Commit 07c7358

Browse files
dbrattligithub-actions[bot]
authored andcommitted
docs: generate blogpost file 77
1 parent e961ea6 commit 07c7358

1 file changed

Lines changed: 33 additions & 27 deletions

File tree

docs/blogpost.md

Lines changed: 33 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Introduction to Fable.Python
22

3-
*Generated on 2026-05-28 17:23 UTC using Fable v5.0.0*
3+
*Generated on 2026-08-13 21:38 UTC using Fable v5.13.0*.
44

55
> This post is part of the [F# Advent Calendar
66
2025](https://sergeytihon.com/2025/11/03/f-advent-calendar-in-english-2025/). Thank you, Sergey Tihon, for organizing
@@ -1794,13 +1794,13 @@ This generates:
17941794
async def process_item_task(item: str) -> str:
17951795
builder_0040: Any = task()
17961796

1797-
def _arrow43(item: Any = item) -> Callable[[FSharpRef[Any]], bool]:
1798-
def _arrow42(__unit: Unit = UNIT) -> Callable[[FSharpRef[Any]], bool]:
1797+
def _arrow59(item: Any = item) -> Callable[[FSharpRef[Any]], bool]:
1798+
def _arrow58(__unit: Unit = UNIT) -> Callable[[FSharpRef[Any]], bool]:
17991799
return builder_0040.Return(item.upper())
18001800

1801-
return builder_0040.Bind(delay(int32(100)), _arrow42)
1801+
return builder_0040.Bind(delay(int32(100)), _arrow58)
18021802

1803-
return await builder_0040.Run(builder_0040.Delay(_arrow43))
1803+
return await builder_0040.Run(builder_0040.Delay(_arrow59))
18041804
```
18051805

18061806
Now frameworks like FastAPI can detect and handle these as proper async endpoints.
@@ -1875,13 +1875,13 @@ In Python, this generates:
18751875

18761876
```python
18771877
def simple_async(__unit: Unit = UNIT) -> Async[int32]:
1878-
def _arrow52(__unit: Unit = UNIT) -> Async[int32]:
1879-
def _arrow51(__unit: Unit = UNIT) -> Async[int32]:
1878+
def _arrow68(__unit: Unit = UNIT) -> Async[int32]:
1879+
def _arrow67(__unit: Unit = UNIT) -> Async[int32]:
18801880
return singleton.Return(int32(42))
18811881

1882-
return singleton.Bind(sleep(int32(500)), _arrow51)
1882+
return singleton.Bind(sleep(int32(500)), _arrow67)
18831883

1884-
return singleton.Delay(_arrow52)
1884+
return singleton.Delay(_arrow68)
18851885
```
18861886

18871887
#### Tasks → Native async def
@@ -1902,13 +1902,13 @@ In Python, this generates:
19021902
async def simple_task(__unit: Unit = UNIT) -> int32:
19031903
builder_0040: Any = task()
19041904

1905-
def _arrow54(__unit: Unit = UNIT) -> Callable[[FSharpRef[Any]], bool]:
1906-
def _arrow53(__unit: Unit = UNIT) -> Callable[[FSharpRef[Any]], bool]:
1905+
def _arrow70(__unit: Unit = UNIT) -> Callable[[FSharpRef[Any]], bool]:
1906+
def _arrow69(__unit: Unit = UNIT) -> Callable[[FSharpRef[Any]], bool]:
19071907
return builder_0040.Return(int32(42))
19081908

1909-
return builder_0040.Bind(delay(int32(500)), _arrow53)
1909+
return builder_0040.Bind(delay(int32(500)), _arrow69)
19101910

1911-
return await builder_0040.Run(builder_0040.Delay(_arrow54))
1911+
return await builder_0040.Run(builder_0040.Delay(_arrow70))
19121912
```
19131913

19141914
#### Running Tasks from F`#`
@@ -2981,7 +2981,7 @@ class API:
29812981
async def get_item(item_id: int32) -> Any:
29822982
builder_0040: Any = task()
29832983

2984-
def _arrow97(__unit: Unit = UNIT) -> Callable[[FSharpRef[Any]], bool]:
2984+
def _arrow113(__unit: Unit = UNIT) -> Callable[[FSharpRef[Any]], bool]:
29852985
def predicate(i: Item) -> bool:
29862986
return i.Id == item_id
29872987

@@ -2993,26 +2993,26 @@ class API:
29932993
item: Item = match_value
29942994
return builder_0040.Return(item)
29952995

2996-
return await builder_0040.Run(builder_0040.Delay(_arrow97))
2996+
return await builder_0040.Run(builder_0040.Delay(_arrow113))
29972997

29982998
@app.post("/items")
29992999
@staticmethod
30003000
async def create_item(request: CreateItemRequest) -> Any:
30013001
builder_0040: Any = task()
30023002

3003-
def _arrow99(__unit: Unit = UNIT) -> Callable[[FSharpRef[Any]], bool]:
3003+
def _arrow115(__unit: Unit = UNIT) -> Callable[[FSharpRef[Any]], bool]:
30043004
def mapping(i: Item) -> int32:
30053005
return i.Id
30063006

3007-
class ObjectExpr98:
3007+
class ObjectExpr114:
30083008
def Compare(self, x: int32, y: int32) -> int32:
30093009
return compare_primitives(x, y)
30103010

30113011
new_item: Item = Item(
30123012
Id=int32.ONE
30133013
if (int32(len(items)) == int32.ZERO)
30143014
else (
3015-
max(map(mapping, to_enumerable(items)), ObjectExpr98()) + int32.ONE
3015+
max(map(mapping, to_enumerable(items)), ObjectExpr114()) + int32.ONE
30163016
),
30173017
Name=request.Name,
30183018
Price=request.Price,
@@ -3021,7 +3021,7 @@ class API:
30213021
(items.append(new_item))
30223022
return builder_0040.Return({"item": new_item, "status": "created"})
30233023

3024-
return await builder_0040.Run(builder_0040.Delay(_arrow99))
3024+
return await builder_0040.Run(builder_0040.Delay(_arrow115))
30253025
```
30263026

30273027
#### Key Points
@@ -3712,16 +3712,22 @@ For example, the extractSymbol function in F# generates this Python:
37123712
```python
37133713
def extract_symbol(symbol: str, lines: Array[str]) -> str | None:
37143714
"""Extracts a single symbol definition from Python source lines."""
3715+
option_1: int32 | None = erase(find_definition_index(symbol, lines))
3716+
if option_1 is not None:
3717+
3718+
def _arrow25(option_1: int32, lines: Any = lines) -> str:
3719+
def_index: int32 = option_1
3720+
start_index: int32 = find_decorator_start(lines, def_index)
3721+
return (
3722+
extract_multiline_body(start_index, def_index, lines)
3723+
if is_multiline_definition(lines[def_index])
3724+
else lines[def_index]
3725+
)
37153726

3716-
def mapping(def_index: int32, lines: Any = lines) -> str:
3717-
start_index: int32 = find_decorator_start(lines, def_index)
3718-
if is_multiline_definition(lines[def_index]):
3719-
return extract_multiline_body(start_index, def_index, lines)
3720-
3721-
else:
3722-
return lines[def_index]
3727+
return _arrow25(option_1)
37233728

3724-
return erase(map(mapping, find_definition_index(symbol, lines)))
3729+
else:
3730+
return None
37253731
```
37263732

37273733
### Main Entry Point

0 commit comments

Comments
 (0)