Skip to content

Commit 7cac02e

Browse files
dbrattligithub-actions[bot]
authored andcommitted
docs: generate blogpost file 78
1 parent 9926e3e commit 7cac02e

1 file changed

Lines changed: 34 additions & 27 deletions

File tree

docs/blogpost.md

Lines changed: 34 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:39 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
@@ -732,6 +732,7 @@ This generates:
732732

733733
```python
734734
def greet(name: str) -> str:
735+
735736
greeting = f"Hello, {name}!"
736737
return greeting
737738
```
@@ -1794,13 +1795,13 @@ This generates:
17941795
async def process_item_task(item: str) -> str:
17951796
builder_0040: Any = task()
17961797

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

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

1803-
return await builder_0040.Run(builder_0040.Delay(_arrow43))
1804+
return await builder_0040.Run(builder_0040.Delay(_arrow59))
18041805
```
18051806

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

18761877
```python
18771878
def simple_async(__unit: Unit = UNIT) -> Async[int32]:
1878-
def _arrow52(__unit: Unit = UNIT) -> Async[int32]:
1879-
def _arrow51(__unit: Unit = UNIT) -> Async[int32]:
1879+
def _arrow68(__unit: Unit = UNIT) -> Async[int32]:
1880+
def _arrow67(__unit: Unit = UNIT) -> Async[int32]:
18801881
return singleton.Return(int32(42))
18811882

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

1884-
return singleton.Delay(_arrow52)
1885+
return singleton.Delay(_arrow68)
18851886
```
18861887

18871888
#### Tasks → Native async def
@@ -1902,13 +1903,13 @@ In Python, this generates:
19021903
async def simple_task(__unit: Unit = UNIT) -> int32:
19031904
builder_0040: Any = task()
19041905

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

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

1911-
return await builder_0040.Run(builder_0040.Delay(_arrow54))
1912+
return await builder_0040.Run(builder_0040.Delay(_arrow70))
19121913
```
19131914

19141915
#### Running Tasks from F`#`
@@ -2981,7 +2982,7 @@ class API:
29812982
async def get_item(item_id: int32) -> Any:
29822983
builder_0040: Any = task()
29832984

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

@@ -2993,26 +2994,26 @@ class API:
29932994
item: Item = match_value
29942995
return builder_0040.Return(item)
29952996

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

29982999
@app.post("/items")
29993000
@staticmethod
30003001
async def create_item(request: CreateItemRequest) -> Any:
30013002
builder_0040: Any = task()
30023003

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

3007-
class ObjectExpr98:
3008+
class ObjectExpr114:
30083009
def Compare(self, x: int32, y: int32) -> int32:
30093010
return compare_primitives(x, y)
30103011

30113012
new_item: Item = Item(
30123013
Id=int32.ONE
30133014
if (int32(len(items)) == int32.ZERO)
30143015
else (
3015-
max(map(mapping, to_enumerable(items)), ObjectExpr98()) + int32.ONE
3016+
max(map(mapping, to_enumerable(items)), ObjectExpr114()) + int32.ONE
30163017
),
30173018
Name=request.Name,
30183019
Price=request.Price,
@@ -3021,7 +3022,7 @@ class API:
30213022
(items.append(new_item))
30223023
return builder_0040.Return({"item": new_item, "status": "created"})
30233024

3024-
return await builder_0040.Run(builder_0040.Delay(_arrow99))
3025+
return await builder_0040.Run(builder_0040.Delay(_arrow115))
30253026
```
30263027

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

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]
3728+
return _arrow25(option_1)
37233729

3724-
return erase(map(mapping, find_definition_index(symbol, lines)))
3730+
else:
3731+
return None
37253732
```
37263733

37273734
### Main Entry Point

0 commit comments

Comments
 (0)