Как мне идиоматически организовать мои чистые функции с моими монадическими действиями

Я решил, что сегодня день, когда я исправлю некоторые из моих чистых функций, которые излишне выполняются в монадическом действии. Вот что у меня есть.

flagWorkDays :: [C.Day] -> Handler [WorkDay] 
flagWorkDays dayList =
   flagWeekEnds dayList >>=
   flagHolidays >>=
   flagScheduled >>=
   flagASAP >>=
   toWorkDays

На данный момент это flagWeekEnds.

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 были очищены?

17
задан hammar 23 November 2011 в 00:05
поделиться