data Reply = Success Command | Error Response data Response = Response String data Command = Go Room | Look Room | Examine Item | Take Item | Show [Item] | ... data Description = Str String | Redacted data Adjective = Adjective String data Kind = Kind { kindName = String , kindCondition = Condition } data Missing = Missing [Kind] data Condition = Pristine | Broken Condition Missing data Room = Room { roomName = String , roomDescription = Description , items = [Item] } data Item = Item { itemName = String , itemDescription = Description , adjectives = [Adjective] , itemCondition = Condition , piledOn = [Item] }