管理機器人出廠設定。
機器人從產線上下來時,還沒有名字。
第一次啟動機器人時,會隨機產生一個名字,格式是兩個大寫字母後面接著三個數字,例如 RX837 或 BC811。
偶爾我們需要把機器人重設回出廠設定,這表示它的名字會被清除。 下一次你詢問時,這台機器人會以一個新的隨機名字回應。
名字必須是隨機的:不能遵循可預測的順序。 使用隨機名字意味著有名稱碰撞的風險。 你的解法必須確保每一台現有的機器人都擁有唯一的名字。
要完成這個練習,你需要建立資料型態 Robot(作為可變變數),以及資料型態 RunState。你還需要實作下列函式:
initialStatemkRobotresetNamerobotName檔案裡已經有虛設的資料宣告和型別簽章喔,但要由你來定義這些函式,並建立有意義的資料型態、newtype 或型別同義詞。為了模擬狀態,這個練習使用了 State monad。更精確地說,我們用 StateT monad 轉換器 把 State monad 與 IO monad 結合起來。所有測試執行時,都會以 initialState 作為傳入 evalStateT 的狀態。