
Hi, I'm trying to model a round robin scheduler in Haskell.
class Schedulable s where isFinal :: s -> Bool
class Scheduler s where add :: (Schedulable a) => a -> s -> s next :: (Schedulable a) => s -> (a, s) empty :: s -> Bool
data Schedulable a => RoundRobin = RoundRobin [a] [a]
instance Scheduler RoundRobin where add p (RoundRobin ps qs) = RoundRobin (ps ++ [p]) qs
next (RoundRobin [] qs) = next (RoundRobin qs []) next (RoundRobin (p:ps) qs) = (p, RoundRobin ps (qs ++ [p]))
empty (RoundRobin [] _) = True empty _ = False
However, GHC complains that
main.hs:9:6: Illegal datatype context (use -XDatatypeContexts): Schedulable a =>
After some searches I realized that datatype contexts are deprecated. So how can I model the scheduler without using datatype contexts? Thanks. -- Regards, Xiao Jia