{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE Unsafe #-} module Scheduler.Unsafe ( ) where import Scheduler (newScheduler) import Scheduler.Internal import Scheduler.Main import System.IO.Unsafe (unsafePerformIO) -- | Extracts the underlying 'IO' action from a 'SchedulerIO' action. -- -- This can be unsafe because the type system does not have enough information to determine -- whether the calling code is running on an appropriate scheduler. unsafeRunSchedulerIO :: Scheduler s => s -> SchedulerIO s a -> IO a unsafeRunSchedulerIO sch (SchedulerIO mf) = mf sch -- | Unsafely executes a 'SchedulerIO' action and shows the result. -- This is for /DEBUGGING PURPOSES ONLY/. instance Show v => Show (SchedulerIO MainScheduler v) where show action = show $ unsafePerformIO $ do sch <- getMainScheduler unsafeRunSchedulerIO sch action instance Show v => Show (SchedulerIO BackgroundScheduler v) where show action = show $ unsafePerformIO $ do sch <- newScheduler unsafeRunSchedulerIO sch action