@@ -140,7 +140,7 @@ import qualified Data.Text.Encoding as TE
140import Data.Type.Bool
140import Data.Type.Bool
142import GHC.TypeLits
142import GHC.TypeLits
143− (KnownSymbol, symbolVal)
143+ (KnownSymbol, TypeError, symbolVal)
144import Network.URI
144import Network.URI
145 (URI (..), escapeURIString, isUnreserved)
145 (URI (..), escapeURIString, isUnreserved)
146import Prelude ()
146import Prelude ()
@@ -183,6 +183,7 @@ import Servant.API.Stream
183 (Stream, StreamBody')
183 (Stream, StreamBody')
184import Servant.API.Sub
184import Servant.API.Sub
185 (type (:>))
185 (type (:>))
186+import Servant.API.TypeErrors
186import Servant.API.TypeLevel
187import Servant.API.TypeLevel
187import Servant.API.UVerb
188import Servant.API.UVerb
188import Servant.API.Vault
189import Servant.API.Vault
@@ -644,3 +645,14 @@ simpleToLink _ toA _ = toLink toA (Proxy :: Proxy sub)
645-- >>> import Servant.API
646-- >>> import Servant.API
646-- >>> import Data.Text (Text)
647-- >>> import Data.Text (Text)
649+-- Erroring instance for 'HasLink' when a combinator is not fully applied
650+instance TypeError (PartialApplication HasLink arr) => HasLink ((arr :: a -> b) :> sub)
652+ type MkLink (arr :> sub) _ = TypeError (PartialApplication HasLink arr)
653+ toLink = error "unreachable"
655+-- Erroring instances for 'HasLink' for unknown API combinators
656+instance {-# OVERLAPPABLE #-} TypeError (NoInstanceForSub HasLink ty) => HasLink (ty :> sub)
658+instance {-# OVERLAPPABLE #-} TypeError (NoInstanceFor (HasLink api)) => HasLink api