@@ -1,6 +1,7 @@
11{-# LANGUAGE CPP #-}
22{-# LANGUAGE ConstraintKinds #-}
33{-# LANGUAGE DataKinds #-}
4+{-# LANGUAGE DeriveDataTypeable #-}
45{-# LANGUAGE FlexibleContexts #-}
56{-# LANGUAGE FlexibleInstances #-}
67{-# LANGUAGE GeneralizedNewtypeDeriving #-}
@@ -32,7 +33,7 @@ import Data.Maybe (fromMaybe, mapMaybe)
3233import Data.Either (partitionEithers)
3334import Data.String (fromString)
3435import Data.String.Conversions (cs, (<>))
35−import Data.Tagged (Tagged, untag)
36+import Data.Tagged (Tagged(..), untag)
3637import qualified Data.Text as T
3738import Data.Typeable
3839import GHC.TypeLits (KnownNat, KnownSymbol, natVal,
@@ -52,7 +53,7 @@ import Web.HttpApiData (FromHttpApiData, parseHeader,
5253 parseUrlPieceMaybe,
5354 parseUrlPieces)
5455import Servant.API ((:<|>) (..), (:>), BasicAuth, Capture,
55− CaptureAll, Verb,
56+ CaptureAll, Verb, EmptyAPI,
5657 ReflectMethod(reflectMethod),
5758 IsSecure(..), Header, QueryFlag,
5859 QueryParam, QueryParams, Raw,
@@ -532,6 +533,24 @@ instance HasServer api context => HasServer (HttpVersion :> api) context where
532533 route Proxy context subserver =
533534 route (Proxy :: Proxy api) context (passToServer subserver httpVersion)
534535
536+-- | Singleton type representing a server that serves an empty API.
537+data EmptyServer = EmptyServer deriving (Typeable, Eq, Show, Bounded, Enum)
538+
539+-- | Server for `EmptyAPI`
540+emptyServer :: ServerT EmptyAPI m
541+emptyServer = Tagged EmptyServer
542+
543+-- | The server for an `EmptyAPI` is `emptyAPIServer`.
544+--
545+-- > type MyApi = "nothing" :> EmptyApi
546+-- >
547+-- > server :: Server MyApi
548+-- > server = emptyAPIServer
549+instance HasServer EmptyAPI context where
550+ type ServerT EmptyAPI m = Tagged m EmptyServer
551+
552+ route Proxy _ _ = StaticRouter mempty mempty
553+
535554-- | Basic Authentication
536555instance ( KnownSymbol realm
537556 , HasServer api context