He decidido que hoy es el día en que corrijo algunas de mis funciones puras que se ejecutan innecesariamente en una acción monádica. Esto es lo que tengo.¿Cómo organizo mis funciones puras con mis acciones monádicas idiomáticamente?
flagWorkDays :: [C.Day] -> Handler [WorkDay]
flagWorkDays dayList =
flagWeekEnds dayList >>=
flagHolidays >>=
flagScheduled >>=
flagASAP >>=
toWorkDays
Aquí está flagWeekEnds, a partir de ahora.
flagWeekEnds :: [C.Day] -> Handler [(C.Day,Availability)]
flagWeekEnds dayList = do
let yepNope = Prelude.map isWorkDay dayList
availability = Prelude.map flagAvailability yepNope
return $ Prelude.zip dayList availability
flagHolidays
sigue un patrón similar. toWorkDays
simplemente cambia un tipo a otro, y es una función pura.
flagScheduled
y flagASAP
son acciones monádicas. No estoy seguro de cómo combinar las acciones monádicas con las funciones puras idiomáticamente en flagWorkDays
. ¿Podría alguien ayudarme a reparar flagWorkDays
, suponiendo que flagWeekEnds
y flagHolidays
se han hecho puros?
+1 para una explicación general – fuz
Brillante, como siempre. – Ingo