ion-1.0.0.0: src/Ivory/Language/Ion/Schedule.hs
{- |
Module: Schedule
Description: Types and functions for flattened schedule
Copyright: (c) 2015 Chris Hodapp
-}
module Ivory.Language.Ion.Schedule where
import qualified Ivory.Language as IL
import Ivory.Language.Ion.Base
import Ivory.Language.Ion.Util
-- | Produce a flat list of scheduled actions.
flatten :: IonDef -> [Schedule]
flatten i = uniqueIds 0 $ prune $ ionSched i
-- join $ map (flattenTree defaultSchedule) $ ionTree i
-- | Prune any schedule item that has no Ivory actions.
prune :: [Schedule] -> [Schedule]
prune = filter (not . null . schedAction)
-- | Assign unique IDs to the list of schedule items, starting from the given
-- ID.
uniqueIds :: Integer -> [Schedule] -> [Schedule]
uniqueIds _ [] = []
uniqueIds n (x:xs) = (x { schedId = n }) : uniqueIds (n + 1) xs