{-# LANGUAGE ScopedTypeVariables #-} ----------------------------------------------------------------------------- -- | -- Module : Hoodle.Script.Coroutine -- Copyright : (c) 2012, 2013 Ian-Woo Kim -- -- License : BSD3 -- Maintainer : Ian-Woo Kim -- Stability : experimental -- Portability : GHC -- ----------------------------------------------------------------------------- module Hoodle.Script.Coroutine where import Control.Lens (view) 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 -- -- | 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 -- | temporary embedPredefinedImage2Hook :: MainCoroutine (Maybe FilePath) embedPredefinedImage2Hook = do xstate <- get (r :: Maybe FilePath) <- runMaybeT $ do hset <- hoist (view hookSet xstate) rfilename <- hoist (H.embedPredefinedImage2Hook hset) liftIO rfilename return r -- | temporary embedPredefinedImage3Hook :: MainCoroutine (Maybe FilePath) embedPredefinedImage3Hook = do xstate <- get (r :: Maybe FilePath) <- runMaybeT $ do hset <- hoist (view hookSet xstate) rfilename <- hoist (H.embedPredefinedImage3Hook hset) liftIO rfilename return r