{-| Copyright : (c) Dave Laing, 2017-2019 License : BSD3 Maintainer : dave.laing.80@gmail.com Stability : experimental Portability : non-portable Serving reflex networks using @warp@. -} {-# language FlexibleContexts, TypeFamilies #-} {-# language RankNTypes #-} module Reflex.Backend.Warp where import Reflex hiding (Request, Response) import Reflex.Host.Basic (BasicGuestConstraints, BasicGuest, basicHostForever) import Reflex.Backend.Wai import Control.Concurrent (forkIO) import Control.Monad (void) import Network.Wai (Request, Response) import Network.Wai.Handler.Warp (Port, run) -- | Serve a reflex network using warp. runAppForever :: Port -- ^ Server port -> (forall t m. BasicGuestConstraints t m => Event t Request -> BasicGuest t m (Event t Response)) -- ^ Reflex network -> IO () runAppForever port network = do waiSource <- newWaiSource void . forkIO $ basicHostForever (waiApplicationGuest waiSource network) void . run port $ waiApplicationHost waiSource