{-# LANGUAGE ScopedTypeVariables #-} ----------------------------------------------------------------------------- -- | -- Module : Hoodle.Script.Coroutine -- Copyright : (c) 2012 Ian-Woo Kim -- -- License : BSD3 -- Maintainer : Ian-Woo Kim -- Stability : experimental -- Portability : GHC -- ----------------------------------------------------------------------------- module Hoodle.Script.Coroutine where import Control.Lens -- import Control.Monad import Control.Monad.State import Control.Monad.Trans.Maybe -- from hoodle-platform import Data.Hoodle.Simple -- from this package import qualified Hoodle.Script.Hook as H import Hoodle.Type.Coroutine import Hoodle.Type.HoodleState -- {- -- | runHookIO2 :: (Hook -> f) -> MainCoroutine () runHookIO2 a b = liftM (H.afterSaveHook <=< view hookSet) get >>= maybe (return ()) (\hk->liftIO (hk a b)) -} -- | afterSaveHook :: FilePath -> Hoodle -> MainCoroutine () afterSaveHook fp hdl = do xstate <- get let aftersavehk = do hset <- view hookSet xstate H.afterSaveHook hset maybe (return ()) (\f -> liftIO (f fp hdl)) aftersavehk -- | saveAsHook :: FilePath -> Hoodle -> MainCoroutine () saveAsHook _fp hdl = do xstate <- get let saveashk = do hset <- view hookSet xstate H.saveAsHook hset maybe (return ()) (\f -> liftIO (f hdl)) saveashk hoist :: (Monad m) => Maybe a -> MaybeT m a hoist = MaybeT . return -- | recentFolderHook :: MainCoroutine (Maybe FilePath) recentFolderHook = do xstate <- get (r :: Maybe FilePath) <- runMaybeT $ do hset <- hoist (view hookSet xstate) rfolder <- hoist (H.recentFolderHook hset) liftIO rfolder return r -- | embedPredefinedImageHook :: MainCoroutine (Maybe FilePath) embedPredefinedImageHook = do xstate <- get (r :: Maybe FilePath) <- runMaybeT $ do hset <- hoist (view hookSet xstate) rfilename <- hoist (H.embedPredefinedImageHook hset) liftIO rfilename return r