أدِر إعدادات مصنع الروبوتات.
عندما يخرج روبوت من المصنع، لا يكون له اسم.
في المرة الأولى التي تشغّل فيها روبوتًا، يُولَّد له اسم عشوائي بصيغة حرفين كبيرين يتلوهما ثلاثة أرقام، مثل RX837 أو BC811.
بين الحين والآخر نحتاج إلى إعادة ضبط روبوت على إعدادات المصنع، ما يعني محو اسمه. وفي المرة التالية التي تسأل فيها، سيستجيب ذلك الروبوت باسم عشوائي جديد.
يجب أن تكون الأسماء عشوائية: فلا يجوز أن تتبع تسلسلًا يمكن التنبؤ به. واستخدام الأسماء العشوائية يحمل خطر التصادم. يجب أن يضمن حلك أن يكون لكل روبوت موجود اسم فريد.
لإكمال هذا التمرين، عليك إنشاء نوع البيانات Robot كمتغير قابل للتغيير، ونوع البيانات RunState. وعليك أيضًا تنفيذ الدوال التالية:
initialStatemkRobotresetNamerobotNameستجد إعلان بيانات وهميًا وتوقيعات الأنواع جاهزة في مكانها بالفعل، لكن الأمر متروك لك لتعريف الدوال وإنشاء نوع بيانات أو newtype أو مرادف نوع ذي معنى. ولمحاكاة الحالة، يستخدم هذا التمرين موناد State. وبشكل أكثر تحديدًا، ندمج موناد State مع موناد IO باستخدام محوّلات موناد StateT. وتُشغَّل جميع الاختبارات مع initialState كحالة تُمرَّر إلى evalStateT.
سجّل في Exercism لتتعلّم وتتقن Haskell عبر 107 تمارين، وإرشاد بشري حقيقي، وكل ذلك مجانًا.