@@ -753,7 +753,29 @@ myHandler :: Server MyHandler
753753myHandler = return $ addHeader 1797 albert
754754```
755755
756−Note that the type of `addHeader x` is different than the type of `x`!
756+Note that the type of `addHeader header x` is different than the type of `x`!
757+And if you add more headers, more headers will appear in the header list:
758+
759+``` haskell
760+type MyHeadfulHandler = Get '[JSON] (Headers '[Header "X-A-Bool" Bool, Header "X-An-Int" Int] User)
761+
762+myHeadfulHandler :: Server MyHeadfulHandler
763+myHeadfulHandler = return $ addHeader True $ addHeader 1797 albert
764+```
765+
766+But what if your handler only *sometimes* adds a header? If you declare that
767+your handler adds headers, and you don't add one, the return type of your
768+handler will be different than expected. To solve this, you have to explicitly
769+*not* add a header by using `noHeader`:
770+
771+``` haskell
772+type MyMaybeHeaderHandler
773+ = Capture "withHeader" Bool :> Get '[JSON] (Headers '[Header "X-An-Int" Int] User)
774+
775+myMaybeHeaderHandler :: Server MyMaybeHeaderHandler
776+myMaybeHeaderHandler x = return $ if x then addHeader 1797 albert
777+ else noHeader albert
778+```
757779
758780## Serving static files
759781