@@ -160,9 +160,12 @@ processedPathInfo r =
160160 where pinfo = parsePathInfo r
161161
162162class HasServer layout where
163− type Server' layout :: *
163+ type ServerT layout (m :: * -> *) :: *
164164 route :: Proxy layout -> Server' layout -> RoutingApplication
165165
166+type Server' layout = ServerT layout (EitherT (Int, String) IO)
167+
168+
166169-- * Instances
167170
168171-- | A server for @a ':<|>' b@ first tries to match the request against the route
@@ -177,7 +180,9 @@ class HasServer layout where
177180-- > where listAllBooks = ...
178181-- > postBook book = ...
179182instance (HasServer a, HasServer b) => HasServer (a :<|> b) where
180− type Server' (a :<|> b) = Server' a :<|> Server' b
183+
184+ type ServerT (a :<|> b) m = ServerT a m :<|> ServerT b m
185+
181186 route Proxy (a :<|> b) request respond =
182187 route pa a request $ \ mResponse ->
183188 if isMismatch mResponse
@@ -210,8 +215,8 @@ captured _ = fromText
210215instance (KnownSymbol capture, FromText a, HasServer sublayout)
211216 => HasServer (Capture capture a :> sublayout) where
212217
213− type Server' (Capture capture a :> sublayout) =
214− a -> Server' sublayout
218+ type ServerT (Capture capture a :> sublayout) m =
219+ a -> ServerT sublayout m
215220
216221 route Proxy subserver request respond = case processedPathInfo request of
217222 (first : rest)
@@ -237,7 +242,8 @@ instance (KnownSymbol capture, FromText a, HasServer sublayout)
237242-- painlessly error out if the conditions for a successful deletion
238243-- are not met.
239244instance HasServer Delete where
240− type Server' Delete = EitherT (Int, String) IO ()
245+
246+ type ServerT Delete m = m ()
241247
242248 route Proxy action request respond
243249 | pathIsEmpty request && requestMethod request == methodDelete = do
@@ -266,7 +272,9 @@ instance HasServer Delete where
266272-- list.
267273instance ( AllCTRender ctypes a
268274 ) => HasServer (Get ctypes a) where
269− type Server' (Get ctypes a) = EitherT (Int, String) IO a
275+
276+ type ServerT (Get ctypes a) m = m a
277+
270278 route Proxy action request respond
271279 | pathIsEmpty request && requestMethod request == methodGet = do
272280 e <- runEitherT action
@@ -306,8 +314,8 @@ instance ( AllCTRender ctypes a
306314instance (KnownSymbol sym, FromText a, HasServer sublayout)
307315 => HasServer (Header sym a :> sublayout) where
308316
309− type Server' (Header sym a :> sublayout) =
310− Maybe a -> Server' sublayout
317+ type ServerT (Header sym a :> sublayout) m =
318+ Maybe a -> ServerT sublayout m
311319
312320 route Proxy subserver request respond = do
313321 let mheader = fromText . decodeUtf8 =<< lookup str (requestHeaders request)
@@ -330,7 +338,8 @@ instance (KnownSymbol sym, FromText a, HasServer sublayout)
330338-- list.
331339instance ( AllCTRender ctypes a
332340 ) => HasServer (Post ctypes a) where
333− type Server' (Post ctypes a) = EitherT (Int, String) IO a
341+
342+ type ServerT (Post ctypes a) m = m a
334343
335344 route Proxy action request respond
336345 | pathIsEmpty request && requestMethod request == methodPost = do
@@ -363,7 +372,8 @@ instance ( AllCTRender ctypes a
363372-- list.
364373instance ( AllCTRender ctypes a
365374 ) => HasServer (Put ctypes a) where
366− type Server' (Put ctypes a) = EitherT (Int, String) IO a
375+
376+ type ServerT (Put ctypes a) m = m a
367377
368378 route Proxy action request respond
369379 | pathIsEmpty request && requestMethod request == methodPut = do
@@ -396,7 +406,8 @@ instance ( AllCTRender ctypes a
396406instance ( AllCTRender ctypes a
397407 , Typeable a
398408 , ToJSON a) => HasServer (Patch ctypes a) where
399− type Server' (Patch ctypes a) = EitherT (Int, String) IO a
409+
410+ type ServerT (Patch ctypes a) m = m a
400411
401412 route Proxy action request respond
402413 | pathIsEmpty request && requestMethod request == methodPost = do
@@ -440,8 +451,8 @@ instance ( AllCTRender ctypes a
440451instance (KnownSymbol sym, FromText a, HasServer sublayout)
441452 => HasServer (QueryParam sym a :> sublayout) where
442453
443− type Server' (QueryParam sym a :> sublayout) =
444− Maybe a -> Server' sublayout
454+ type ServerT (QueryParam sym a :> sublayout) m =
455+ Maybe a -> ServerT sublayout m
445456
446457 route Proxy subserver request respond = do
447458 let querytext = parseQueryText $ rawQueryString request
@@ -478,8 +489,8 @@ instance (KnownSymbol sym, FromText a, HasServer sublayout)
478489instance (KnownSymbol sym, FromText a, HasServer sublayout)
479490 => HasServer (QueryParams sym a :> sublayout) where
480491
481− type Server' (QueryParams sym a :> sublayout) =
482− [a] -> Server' sublayout
492+ type ServerT (QueryParams sym a :> sublayout) m =
493+ [a] -> ServerT sublayout m
483494
484495 route Proxy subserver request respond = do
485496 let querytext = parseQueryText $ rawQueryString request
@@ -511,8 +522,8 @@ instance (KnownSymbol sym, FromText a, HasServer sublayout)
511522instance (KnownSymbol sym, HasServer sublayout)
512523 => HasServer (QueryFlag sym :> sublayout) where
513524
514− type Server' (QueryFlag sym :> sublayout) =
515− Bool -> Server' sublayout
525+ type ServerT (QueryFlag sym :> sublayout) m =
526+ Bool -> ServerT sublayout m
516527
517528 route Proxy subserver request respond = do
518529 let querytext = parseQueryText $ rawQueryString request
@@ -554,8 +565,8 @@ parseMatrixText = parseQueryText
554565instance (KnownSymbol sym, FromText a, HasServer sublayout)
555566 => HasServer (MatrixParam sym a :> sublayout) where
556567
557− type Server' (MatrixParam sym a :> sublayout) =
558− Maybe a -> Server' sublayout
568+ type ServerT (MatrixParam sym a :> sublayout) m =
569+ Maybe a -> ServerT sublayout m
559570
560571 route Proxy subserver request respond = case parsePathInfo request of
561572 (first : _)
@@ -592,8 +603,8 @@ instance (KnownSymbol sym, FromText a, HasServer sublayout)
592603instance (KnownSymbol sym, FromText a, HasServer sublayout)
593604 => HasServer (MatrixParams sym a :> sublayout) where
594605
595− type Server' (MatrixParams sym a :> sublayout) =
596− [a] -> Server' sublayout
606+ type ServerT (MatrixParams sym a :> sublayout) m =
607+ [a] -> ServerT sublayout m
597608
598609 route Proxy subserver request respond = case parsePathInfo request of
599610 (first : _)
@@ -626,8 +637,8 @@ instance (KnownSymbol sym, FromText a, HasServer sublayout)
626637instance (KnownSymbol sym, HasServer sublayout)
627638 => HasServer (MatrixFlag sym :> sublayout) where
628639
629− type Server' (MatrixFlag sym :> sublayout) =
630− Bool -> Server' sublayout
640+ type ServerT (MatrixFlag sym :> sublayout) m =
641+ Bool -> ServerT sublayout m
631642
632643 route Proxy subserver request respond = case parsePathInfo request of
633644 (first : _)
@@ -654,7 +665,9 @@ instance (KnownSymbol sym, HasServer sublayout)
654665-- > server :: Server MyApi
655666-- > server = serveDirectory "/var/www/images"
656667instance HasServer Raw where
657− type Server' Raw = Application
668+
669+ type ServerT Raw m = Application
670+
658671 route Proxy rawApplication request respond =
659672 rawApplication request (respond . succeedWith)
660673
@@ -681,8 +694,8 @@ instance HasServer Raw where
681694instance ( AllCTUnrender list a, HasServer sublayout
682695 ) => HasServer (ReqBody list a :> sublayout) where
683696
684− type Server' (ReqBody list a :> sublayout) =
685− a -> Server' sublayout
697+ type ServerT (ReqBody list a :> sublayout) m =
698+ a -> ServerT sublayout m
686699
687700 route Proxy subserver request respond = do
688701 -- See HTTP RFC 2616, section 7.2.1
@@ -701,7 +714,9 @@ instance ( AllCTUnrender list a, HasServer sublayout
701714-- | Make sure the incoming request starts with @"/path"@, strip it and
702715-- pass the rest of the request path to @sublayout@.
703716instance (KnownSymbol path, HasServer sublayout) => HasServer (path :> sublayout) where
704− type Server' (path :> sublayout) = Server' sublayout
717+
718+ type ServerT (path :> sublayout) m = ServerT sublayout m
719+
705720 route Proxy subserver request respond = case processedPathInfo request of
706721 (first : rest)
707722 | first == cs (symbolVal proxyPath)