Metadata-Version: 2.3
Name: continuationmonad
Version: 0.0.1
Summary: A library that encapsulates callback functions within a continuation monad, utilizing a trampoline scheduler to enable stack-safe computations.
Project-URL: Homepage, https://github.com/MichaelSchneeberger/continuation-monad
Author-email: Michael Schneeberger <michael.schneeb@hotmail.com>
License-File: LICENCE
Requires-Python: >=3.12
Description-Content-Type: text/markdown

# Continuation-Monad


## Installation

You can install Continuation-Monad using pip:

```
pip install continuationmonad
```


## Example

``` python
from donotation import do

import continuationmonad


@do()
def tail_recursion(count: int):
    print(f'{count=}')

    if count == 0:
        return continuationmonad.return_(count)
    
    else:
        # schedule recursive call on the trampoline
        yield from continuationmonad.trampoline()
        return tail_recursion(count - 1)

trampoline = continuationmonad.init_main_trampoline()

def action():
    def on_next(_, value: int):
        print(value)
        return trampoline.stop()

    cont = tail_recursion(5)
    return cont.subscribe(trampoline, on_next)

trampoline.run(action)
```

