Как смоделировать 2D-мир на Haskell

Я делаю игру. Игра состоит из бесконечной плоскости. Единицы должны быть на дискретном квадрате, чтобы их можно было разместить с помощью простого 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 для использования на клиенте, и я не хочу писать тонны шаблонов синтаксического анализа.

5
задан Cactus 16 March 2016 в 09:53
поделиться