graninas / graninas/hinteractive
Decouple Input / Output actions from `AdventureLF`
- 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.