У меня есть эта повторяющаяся проблема при программировании в Haskell. В какой-то момент я пытаюсь моделировать подход ООП. Здесь я писал какой-то ИИ для флеш-игры, которую я нашел, и я хотел бы описать различные части и уровень как список частей.
module Main where
type Dimension = (Int, Int)
type Position = (Int, Int)
data Orientation = OrienLeft | OrienRight
data Pipe = Vertical | Horizontal | UpLeft | UpRight | DownLeft | DownRight
data Tank = Tank Dimension Orientation
data Bowl = Bowl Dimension
data Cross = Cross
data Source = Source Dimension
-- desired
-- data Piece = Pipe | Tank | Bowl | Cross | Source
-- So that I can put them in a list, and define
-- data Level = [Piece]
Я знаю, что должен абстрагироваться от функциональности и помещать их в список, но я часто чувствую себя заблокированным в процессе написания кода. Каково общее мышление, которое я должен иметь в этих ситуациях?