Sto provando il modulo Gloss di Haskell e ho trovato un modello di cose necessarie per visualizzare correttamente un oggetto: posizione, dimensioni, scala e rappresentazione dell'immagine. Questo mi è sembrato un buon uso delle classificazioni, quindi ho scritto questo:
class Displayable d where
toPicture :: d -> Picture
getDims :: d -> (Float,Float)
getPos :: d -> (Float,Float)
getScale :: d -> Float
setDims :: (Float,Float) -> d -> d
setPos :: (Float,Float) -> d -> d
setScale :: Float -> d -> d
setDims _ d = d
setPos _ d = d
setScale _ d = d
getDims _ = (0,0)
getPos _ = (0,0)
getScale _ = 0
Non ho mai usato tipografie doganali prima però, quindi ho alcune domande sul loro utilizzo:
-
Prima di tutto, questa situazione è appropriata per un typeclass?
-
Ho notato che ho bisogno di molti metodi per farlo funzionare (probabilmente aggiungerò anche
get/setRotation
, quindi crescerà). È tipico? È un segnale che sto cercando di includere troppo? -
Devo definire definizioni predefinite come ho? Per alcuni scenari, potrei non aver bisogno di definire una caratteristica particolare, ma vorrei che l'oggetto approfittasse del resto della classe (come la necessità di ruotare un mondo o ottenere le dimensioni di una "entità non fisica"). Tuttavia, mi rendo conto che se le definizioni predefinite non vengono prese in considerazione, potrebbe portare a risultati strani (come gli oggetti che hanno una scala 0 di default, che potrebbe renderli invisibili).
-
I getter / setter sono il modo migliore per ottenere ciò che sto cercando di fare (un'interfaccia centrale per manipolare oggetti visualizzabili)?
(So che le rappresentazioni di dati non sono pensate come oggetti in Haskell, ma dato che sto cercando di rappresentare qualcosa di visivo, ho pensato che il termine oggetto fosse appropriato)
Ogni pensiero sarebbe apprezzato.