Skip to content

Commit

Permalink
Merge pull request #2 from WHForks/kyo-project-fixes
Browse files Browse the repository at this point in the history
Fix mkdocs rendering issues with the kyo project
  • Loading branch information
TurtlePU authored Oct 16, 2024
2 parents ddd18fb + 08a76e6 commit 88bcae6
Showing 1 changed file with 14 additions and 6 deletions.
20 changes: 14 additions & 6 deletions docs/projects/kyo-direct-plugin.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,9 @@ Kyo — новая библиотека для работы с алгебр
Она поддерживает как стандартный монадический стиль для комбинации эффектов,
так и новый direct style.

Например монадический стиль, с использованием `map`
```scala 3 title="monadic style"
Например, монадический стиль, с использованием `map`

```scala
val fibMonadic: Unit < Routes = AtomicRef
.init((0, 1, 1))
.map(state =>
Expand All @@ -27,7 +28,8 @@ val fibMonadic: Unit < Routes = AtomicRef
```

В настоящее время переводится в следующий код с использованием direct style
```scala 3 title="direct style"

```scala
val fib: Unit < Routes = defer:
val state = await(AtomicRef.init[(Int, Int, Int)]((0, 1, 1)))
await(
Expand All @@ -48,18 +50,23 @@ val fib: Unit < Routes = defer:
конструкты языка, такие как `var`, `try`, `throw` и подобные, а также изменять
поведение типов с эффектами таким образом, что вместо типа эффекта при вызове
функций и методов будет использоваться итоговый тип, например:
```scala 3

```scala
pure def x: Int < IO = IO(3).map(_ + 3)
```

вызовет ошибку компиляции, так как тип `Int`, являющийся итоговым типом pending типа
`Int < IO`, являющимся типом выражения `IO(3)`, не имеет функции `map`. С другой стороны,
код
```scala 3

```scala
pure def x: Int < IO = IO(3) + 3
```

скомпилируется и при вычислении получится 6. Исходный пример будет выглядеть примерно
так:
```scala 3 title="direct style pure"

```scala
pure def fib: Unit < Routes =
val state = AtomicRef.init[(Int, Int, Int)]((0, 1, 1))
Routes.add(
Expand All @@ -69,6 +76,7 @@ pure def fib: Unit < Routes =
state.updateAndGet((_, b, c) => (b, c, b + c))
a.toString
```

Что не отличается от императивной версии того же кода, при этом сохраняя информацию
об используемых эффектах

Expand Down

0 comments on commit 88bcae6

Please sign in to comment.