{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE DoAndIfThenElse #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeFamilies #-} module Web.Spock.Internal.Core ( SpockAllT , spockAllT , middleware , hookRoute , hookAny , subcomponent ) where import Web.Spock.Internal.Wire import Control.Monad.Error import Prelude hiding (head) import Web.Routing.AbstractRouter import qualified Network.Wai.Handler.Warp as Warp -- | Run a raw spock server on a defined port. If you don't need -- a custom base monad you can just supply 'id' as lift function. spockAllT :: (MonadIO m, AbstractRouter r, RouteAppliedAction r ~ ActionT m ()) => r -> Warp.Port -> (forall a. m a -> IO a) -> SpockAllT r m () -> IO () spockAllT registryIf port liftSpock routeDefs = do spockApp <- buildApp registryIf liftSpock routeDefs putStrLn $ "Spock is up and running on port " ++ show port Warp.run port spockApp