Я делаю игру. Игра состоит из бесконечной плоскости. Единицы должны быть на дискретном квадрате, чтобы их можно было разместить с помощью простого Location {x :: Int, y :: Int}
Может быть много видов Unit
s. Некоторые могут быть существами, а некоторые - просто объектами, такими как каменный блок или дерево (подумайте о 2d майнкрафте). Многие будут пустыми (просто трава или что-то еще).
Как бы вы смоделировали это на Haskell? Я подумал о том, чтобы сделать следующее, но как насчет Object vs Creature? у них могут быть разные поля? Нормализовать их все на Отряде?
data Unit = Unit { x :: Int, y :: Int, type :: String, ... many shared properties... }
Я также подумал о типе локации
data Location = Location { x :: Int, y :: Int, unit :: Unit }
-- or this
data Location = Location { x :: Int, y :: Int }
data Unit = Unit { unitFields... , location :: Location }
Есть ли у вас какие-нибудь идеи? В объектно-ориентированном языке я, вероятно, имел бы Location
или Unit
наследовать друг от друга и сделал бы определенные типы Unit наследовать друг от друга.
Еще одно соображение - это будет отправка большого количества этих объектов по сети, поэтому мне нужно будет сериализовать их в JSON для использования на клиенте, и я не хочу писать тонны шаблонов синтаксического анализа.