graninas / graninas/hinteractive

Decouple Input / Output actions from `AdventureLF`

Open
#9 0 comments 0 reactions 0 assignees View on GitHub
enhancement game engine: language refactoring research
Dominant language
Haskell
Stars
7
Forks
1
PR merge metrics
No merged PRs in 30d

Description

Сейчас взаимодействие с внешним миром описывается с помощью операций `GetUserInput` и `PrintMessage` из типа `AdventureLF`, и есть только один интерпретатор, который взаимодействует с консолью. Хотелось бы, чтобы способ общения с внешним миром можно было заменять (Dependency Injection). Это может быть как консоль, так, например, и HTTP-интерфейс.

Нужно создать новый фри-монадический язык для взаимодействия с внешним миром и вынести в него операции `GetUserInput` и `PrintMessage`.

Изменить "умные конструкторы" `getUserInput` и `printMessage` таким образом, чтобы их интерфейс оставался прежним, но при этом использовались операции нового языка.

Добавить зависимость от этого языка в `AdventureL` (либо дополнительный параметр типа, либо завернуть в дополнительные конструкторы в типе `AdventureLF` - требует исследования. Что-то похожее я делал [здесь](https://github.com/juspay/purescript-presto/blob/c47957b6a9f97b30a2e72e672860da8ec5146ae4/src/Presto/Core/Types/Language/Flow.purs#L35)).

Вынести общение с консолью из интерпретатора `AdventureL` в отдельный интерпретатор. Параметризовать первый вторым.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.