Сегодня я решил, что я исправлю некоторые из моих чистых функций, которые излишне выполняются в монадическом действии. Вот что у меня есть.
flagWorkDays :: [C.Day] -> Handler [WorkDay]
flagWorkDays dayList =
flagWeekEnds dayList >>=
flagHolidays >>=
flagScheduled >>=
flagASAP >>=
toWorkDays
Вот флагWeekEnds, на данный момент.
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 следует аналогичной схеме. toWorkDays просто изменяет один тип на другой и является чистой функцией.
flagScheduled и flagASAP являются монадическими действиями. Я не уверен, как объединить монадические действия с чистыми функциями идиоматически в flagWorkDays. Может ли кто-нибудь помочь мне исправить flagWorkDays, если flagWeekEnds и flagHolidays были сделаны чистыми?