<div dir="ltr"><div><div><div><div><div><div><div><div><div><div><div>Bonjour,<br><br></div>Je suis toujours sur mon coding dojo (qui s'est transformer en kata FP pour moi) et du coup je me pose des questions là dessus :<br>
getStats :: Extractor -> [MonthStmt] -> Statistics<br>getStats f = makeStatistics . extract f<br><br>weeklyStats :: Extractor -> [MonthStmt] -> [Statistics]<br>weeklyStats e d = map ((\f -> getStats f d) . filterByMonth) [first, second, third, forth]<br>
    where filterByMonth m = Extractor (\w -> catMaybes [m w]) allDaysF allTemperaturesF `mappend` e<br><br>monthlyStats :: Extractor -> [MonthStmt] -> [Statistics]<br>monthlyStats e = map (\m -> getStats e [m])<br>
<br></div>(pour info, le reste du code est là : <a href="https://github.com/blackheaven/dojo_14-04-10/blob/master/fonctionnel/haskell/src/Thermometre.hs#L121">https://github.com/blackheaven/dojo_14-04-10/blob/master/fonctionnel/haskell/src/Thermometre.hs#L121</a>)<br>
<br></div>Mon idée c'est que je suis arrivé à factoriser les filtres (Extractor) et maintenant je veux factoriser les groupements.<br><br></div>Je veux pouvoir faire : getStats monthly mondays data<br></div>Ce qui donnerait :<br>
</div>getStats :: (Functor t) => (Extractor -> [MonthStmt] -> t Statistics) -> Extractor  -> [MonthStmt] -> t Statistics<br></div>getStats g e d = makeStatistics <$> g e d<br><br></div>Le soucis que je rencontre c'est que pour le getStats original, ma donnée n'a pas de contexte (je veux dire qu'elle n'est pas dans une structure de données), du coup je suis un peu eu.<br>
<br></div>Est-ce qu'il y a un moyen d'avoir un contexte optionnel ou dois-je passer par les type classes ?<br><br></div>Merci par avance pour votre réponse.<br><br></div>NB : Ce questionnement est indépendant de l'autre, je veux juste renforcer ma compréhension du système de types.<br>
<div><div><div><div><div><div><div><div><br></div></div></div></div></div></div></div></div></div>