@@ -20,6 +20,8 @@
20#include "overlapping-compat.h"
20#include "overlapping-compat.h"
21module Servant.Docs.Internal where
21module Servant.Docs.Internal where
23import Control.Applicative
25import Control.Applicative
24import Control.Arrow (second)
26import Control.Arrow (second)
25import Control.Lens (makeLenses, mapped, over, traversed, view, (%~),
27import Control.Lens (makeLenses, mapped, over, traversed, view, (%~),
@@ -30,9 +32,10 @@ import qualified Data.ByteString.Char8 as BSC
30import qualified Data.CaseInsensitive as CI
32import qualified Data.CaseInsensitive as CI
31import Data.Hashable (Hashable)
33import Data.Hashable (Hashable)
32import Data.HashMap.Strict (HashMap)
34import Data.HashMap.Strict (HashMap)
33−import Data.List
35+import Data.List.Compat (intercalate, intersperse, sort)
34import Data.Maybe
36import Data.Maybe
35−import Data.Monoid
37+import Data.Monoid (All (..), Any (..), Sum (..), Product (..), First (..), Last (..), Dual (..))
38+import Data.Semigroup (Semigroup (..))
36import Data.Ord (comparing)
39import Data.Ord (comparing)
37import Data.Proxy (Proxy(Proxy))
40import Data.Proxy (Proxy(Proxy))
38import Data.String.Conversions (cs)
41import Data.String.Conversions (cs)
@@ -102,8 +105,11 @@ data API = API
102 , _apiEndpoints :: HashMap Endpoint Action
105 , _apiEndpoints :: HashMap Endpoint Action
103 } deriving (Eq, Show)
106 } deriving (Eq, Show)
108+instance Semigroup API where
105instance Monoid API where
111instance Monoid API where
106− API a1 b1 `mappend` API a2 b2 = API (a1 <> a2) (b1 <> b2)
112+ API a1 b1 `mappend` API a2 b2 = API (a1 `mappend` a2) (b1 `mappend` b2)
107 mempty = API mempty mempty
113 mempty = API mempty mempty
109-- | An empty 'API'
115-- | An empty 'API'
@@ -162,6 +168,8 @@ data DocNote = DocNote
162-- These are intended to be built using extraInfo.
168-- These are intended to be built using extraInfo.
163-- Multiple ExtraInfo may be combined with the monoid instance.
169-- Multiple ExtraInfo may be combined with the monoid instance.
164newtype ExtraInfo api = ExtraInfo (HashMap Endpoint Action)
170newtype ExtraInfo api = ExtraInfo (HashMap Endpoint Action)
171+instance Semigroup (ExtraInfo a) where
165instance Monoid (ExtraInfo a) where
173instance Monoid (ExtraInfo a) where
166 mempty = ExtraInfo mempty
174 mempty = ExtraInfo mempty
167 ExtraInfo a `mappend` ExtraInfo b =
175 ExtraInfo a `mappend` ExtraInfo b =