Skip to content

Commit

Permalink
Merge branch 'main' into add-nix-flake
Browse files Browse the repository at this point in the history
  • Loading branch information
WeetHet authored Oct 16, 2024
2 parents 303b7ac + 88da9eb commit f9e9359
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 9 deletions.
11 changes: 8 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
# Church of church project website
# Church of Church project site

This is a collection of projects and research ideas mainly for HSE students
Church of Church is a union of students and graduates of FCS HSE interested in functional programming, formal verification, type theory, compilers & programming language design.

This is our project site made using [Material theme for MkDocs](https://squidfunk.github.io/mkdocs-material/). Please enjoy!
You can build it with
```shell
nix build .#documentation
Expand All @@ -10,4 +11,8 @@ nix build .#documentation
Or run a development server that automatically updates on changes with
```shell
nix run .#watch-documentation
```
```

If you have any suggestions, please contact @TurtlePU.

PRs are always welcome!
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 f9e9359

Please sign in to comment.