Керуйте фабричними налаштуваннями робота.
Коли робот сходить з конвеєра фабрики, у нього немає імені.
Коли ми вперше вмикаємо робота, генерується випадкове імʼя у форматі двох великих літер, за якими йдуть три цифри, наприклад RX837 або BC811.
Час від часу нам потрібно скинути робота до фабричних налаштувань, а це означає, що його імʼя стирається. Наступного разу, коли ми запитаємо, робот відповість новим випадковим іменем.
Імена мають бути випадковими: вони не повинні йти у передбачуваній послідовності. Використання випадкових імен означає ризик збігів. Ваше рішення має гарантувати, що кожен наявний робот має унікальне імʼя.
Щоб виконати цю вправу, потрібно створити тип даних Robot як змінну, яку можна змінювати, і тип даних RunState. Також потрібно реалізувати такі функції:
initialStatemkRobotresetNamerobotNameУже є фіктивне оголошення даних і сигнатури типів, але функції потрібно визначити самостійно, як і створити змістовний тип даних, newtype або синонім типу. Щоб змоделювати стан, ця вправа використовує монаду State. Точніше, монаду State ми поєднуємо з монадою IO за допомогою трансформерів монад StateT. Усі тести запускаються з initialState як станом, який передається в evalStateT.