今天我决定修复一些不必要运行在单子操作中的纯函数。以下是我的代码。
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
已被变成纯函数?
flip(.)
的通常名称/预定义函数?我有点难过,因为这里的转换不得不把事情搞反了。 - hugomg>>>
是从Control.Arrow模块中引入的吗?(尽管它有一个更通用的类型。) - dave4420