2011-12-03 2 views
0

Je construire une [CalendarDay] qui ressemble à ceQuel est le bon choix de conception ici?

newtype CalendarDay = MKCal (Either AvailableDay UnAvailableDay) deriving Show 

En ce moment, je passe un type de données intermédiaire à travers plusieurs filtres avec l'intention de la construction du [CalendarDay] une fois que toutes les informations ont été recueillies. Le problème est, le tuple est maintenant devenu un tuple de quatre valeurs. Ce qui signifie qu'il est temps de faire quelque chose de différent.

Mes options semblent être l'une des deux.

1) Construire un enregistrement contenant les quatre valeurs, en le passant à chaque filtre, puis construire le [CalendarDay].

2) Construisez le [CalendarDay] au fur et à mesure de chaque filtre, en supprimant complètement le type de données intermédiaire.

Avis de bienvenue. Je me penche vers l'option 2.

Je vais écrire cela dans une entrée blog. Je n'ai pas de blog, mais le site de Michael Snoyman servira jusqu'à ce que je répare ce problème.

+1

Voulez-vous utiliser la notation de liste ici dans '[CalendarDay]'? Si oui, quel genre de liste essayez-vous de construire? En outre, quelles sortes de valeurs sont filtrées pour générer le résultat souhaité? Il est difficile de dire beaucoup plus sur la conception sans une meilleure idée de ce qui doit arriver. – acfoltzer

+0

J'étais en train d'élaborer sur le problème, quand il m'est apparu que je pourrais simplifier de telle sorte que je puisse garder mon tuple triple valeur et conserver l'essentiel de mon design original. Si je suis encore coincé, je développerai plus loin, mais ceci peut être résolu. –

+2

On dirait que vous avez appris quelque chose en cours de route, donc ce serait une bonne contribution à la communauté pour répondre à votre propre question :) – acfoltzer

Répondre

1

Je tenterais de construire le type de manière incrémentielle, en remplaçant les valeurs undefined par leur valeur trouvée au fur et à mesure de sa découverte.

Si le recours à la paresse n'est pas attrayant, vous pouvez garantir la sécurité par des types intermédiaires bien définis pour chaque étape.