on master help sign in
Derive Typeable for internal servant-foreign types
80c6ba5Oleg Grenrus
servant-foreign/src/Servant/Foreign/Internal.hs+11−10
@@ -16,6 +16,7 @@ import Data.Monoid
16import Data.Proxy
16import Data.Proxy
17import Data.String
17import Data.String
18import Data.Text
18import Data.Text
19+import Data.Typeable (Typeable)
19import Data.Text.Encoding (decodeUtf8)
20import Data.Text.Encoding (decodeUtf8)
20import GHC.TypeLits
21import GHC.TypeLits
21import qualified Network.HTTP.Types as HTTP
22import qualified Network.HTTP.Types as HTTP
@@ -25,19 +26,19 @@ import Servant.API.TypeLevel
25
26
26
27
27newtype FunctionName = FunctionName { unFunctionName :: [Text] }
28newtype FunctionName = FunctionName { unFunctionName :: [Text] }
28− deriving (Data, Show, Eq, Monoid)
29+ deriving (Data, Show, Eq, Monoid, Typeable)
29
30
30makePrisms ''FunctionName
31makePrisms ''FunctionName
31
32
32newtype PathSegment = PathSegment { unPathSegment :: Text }
33newtype PathSegment = PathSegment { unPathSegment :: Text }
33− deriving (Data, Show, Eq, IsString, Monoid)
34+ deriving (Data, Show, Eq, IsString, Monoid, Typeable)
34
35
35makePrisms ''PathSegment
36makePrisms ''PathSegment
36
37
37data Arg f = Arg
38data Arg f = Arg
38 { _argName :: PathSegment
39 { _argName :: PathSegment
39 , _argType :: f }
40 , _argType :: f }
40− deriving (Data, Eq, Show)
41+ deriving (Data, Eq, Show, Typeable)
41
42
42makeLenses ''Arg
43makeLenses ''Arg
43
44
@@ -49,12 +50,12 @@ data SegmentType f
49 -- ^ a static path segment. like "/foo"
50 -- ^ a static path segment. like "/foo"
50 | Cap (Arg f)
51 | Cap (Arg f)
51 -- ^ a capture. like "/:userid"
52 -- ^ a capture. like "/:userid"
52− deriving (Data, Eq, Show)
53+ deriving (Data, Eq, Show, Typeable)
53
54
54makePrisms ''SegmentType
55makePrisms ''SegmentType
55
56
56newtype Segment f = Segment { unSegment :: SegmentType f }
57newtype Segment f = Segment { unSegment :: SegmentType f }
57− deriving (Data, Eq, Show)
58+ deriving (Data, Eq, Show, Typeable)
58
59
59makePrisms ''Segment
60makePrisms ''Segment
60
61
@@ -72,7 +73,7 @@ data ArgType
72 = Normal
73 = Normal
73 | Flag
74 | Flag
74 | List
75 | List
75− deriving (Data, Eq, Show)
76+ deriving (Data, Eq, Show, Typeable)
76
77
77makePrisms ''ArgType
78makePrisms ''ArgType
78
79
@@ -80,7 +81,7 @@ data QueryArg f = QueryArg
80 { _queryArgName :: Arg f
81 { _queryArgName :: Arg f
81 , _queryArgType :: ArgType
82 , _queryArgType :: ArgType
82 }
83 }
83− deriving (Data, Eq, Show)
84+ deriving (Data, Eq, Show, Typeable)
84
85
85makeLenses ''QueryArg
86makeLenses ''QueryArg
86
87
@@ -90,7 +91,7 @@ data HeaderArg f = HeaderArg
90 { _headerArg :: Arg f
91 { _headerArg :: Arg f
91 , _headerPattern :: Text
92 , _headerPattern :: Text
92 }
93 }
93− deriving (Data, Eq, Show)
94+ deriving (Data, Eq, Show, Typeable)
94
95
95makeLenses ''HeaderArg
96makeLenses ''HeaderArg
96
97
@@ -100,7 +101,7 @@ data Url f = Url
100 { _path :: Path f
101 { _path :: Path f
101 , _queryStr :: [QueryArg f]
102 , _queryStr :: [QueryArg f]
102 }
103 }
103− deriving (Data, Eq, Show)
104+ deriving (Data, Eq, Show, Typeable)
104
105
105defUrl :: Url f
106defUrl :: Url f
106defUrl = Url [] []
107defUrl = Url [] []
@@ -115,7 +116,7 @@ data Req f = Req
115 , _reqReturnType :: Maybe f
116 , _reqReturnType :: Maybe f
116 , _reqFuncName :: FunctionName
117 , _reqFuncName :: FunctionName
117 }
118 }
118− deriving (Data, Eq, Show)
119+ deriving (Data, Eq, Show, Typeable)
119
120
120makeLenses ''Req
121makeLenses ''Req
121
122