git.iko.soy/typeable/servant
on master help sign in
stylish haskell changes
6eb7addJulian K. Arni
servant-blaze/Setup.hs+1−1
@@ -1,2 +1,2 @@
1−import Distribution.Simple
1+import Distribution.Simple
2main = defaultMain
2main = defaultMain
servant-client/Setup.hs+1−1
@@ -1,2 +1,2 @@
1−import Distribution.Simple
1+import Distribution.Simple
2main = defaultMain
2main = defaultMain
servant-client/src/Servant/Common/BaseUrl.hs+9−9
@@ -11,13 +11,13 @@ module Servant.Common.BaseUrl (
11 , showBaseUrl
11 , showBaseUrl
12) where
12) where
13
13
14−import Control.Monad.Catch (MonadThrow, throwM, Exception)
14+import Control.Monad.Catch (Exception, MonadThrow, throwM)
15−import Data.List
15+import Data.List
16−import Data.Typeable
16+import Data.Typeable
17−import GHC.Generics
17+import GHC.Generics
18−import Network.URI
18+import Network.URI
19−import Safe
19+import Safe
20−import Text.Read
20+import Text.Read
21
21
22-- | URI scheme to use
22-- | URI scheme to use
23data Scheme =
23data Scheme =
@@ -29,8 +29,8 @@ data Scheme =
29-- for servant's automatically-generated clients.
29-- for servant's automatically-generated clients.
30data BaseUrl = BaseUrl
30data BaseUrl = BaseUrl
31 { baseUrlScheme :: Scheme -- ^ URI scheme to use
31 { baseUrlScheme :: Scheme -- ^ URI scheme to use
32− , baseUrlHost :: String -- ^ host (eg "haskell.org")
32+ , baseUrlHost :: String -- ^ host (eg "haskell.org")
33− , baseUrlPort :: Int -- ^ port (eg 80)
33+ , baseUrlPort :: Int -- ^ port (eg 80)
34 } deriving (Show, Eq, Ord, Generic)
34 } deriving (Show, Eq, Ord, Generic)
35
35
36showBaseUrl :: BaseUrl -> String
36showBaseUrl :: BaseUrl -> String
servant-client/test/Servant/Common/BaseUrlSpec.hs+6−6
@@ -1,15 +1,15 @@
1−{-# LANGUAGE CPP #-}
1+{-# LANGUAGE CPP #-}
2{-# OPTIONS_GHC -fno-warn-orphans #-}
2{-# OPTIONS_GHC -fno-warn-orphans #-}
3module Servant.Common.BaseUrlSpec where
3module Servant.Common.BaseUrlSpec where
4
4
5#if !MIN_VERSION_base(4,8,0)
5#if !MIN_VERSION_base(4,8,0)
6−import Control.Applicative
6+import Control.Applicative
7#endif
7#endif
8−import Control.DeepSeq
8+import Control.DeepSeq
9−import Test.Hspec
9+import Test.Hspec
10−import Test.QuickCheck
10+import Test.QuickCheck
11
11
12−import Servant.Common.BaseUrl
12+import Servant.Common.BaseUrl
13
13
14spec :: Spec
14spec :: Spec
15spec = do
15spec = do
servant-client/test/Spec.hs+1−1
@@ -1,4 +1,4 @@
1−import Servant.ClientSpec (spec, failSpec)
1+import Servant.ClientSpec (failSpec, spec)
2
2
3main :: IO ()
3main :: IO ()
4main = do
4main = do
servant-docs/Setup.hs+1−1
@@ -1,2 +1,2 @@
1−import Distribution.Simple
1+import Distribution.Simple
2main = defaultMain
2main = defaultMain
servant-docs/src/Servant/Docs.hs+1−1
@@ -166,4 +166,4 @@ module Servant.Docs
166 , single
166 , single
167 ) where
167 ) where
168
168
169−import Servant.Docs.Internal
169+import Servant.Docs.Internal
servant-docs/src/Servant/Docs/Internal.hs+2−2
@@ -1,5 +1,5 @@
1−{-# LANGUAGE ConstraintKinds #-}
2{-# LANGUAGE CPP #-}
1{-# LANGUAGE CPP #-}
2+{-# LANGUAGE ConstraintKinds #-}
3{-# LANGUAGE DataKinds #-}
3{-# LANGUAGE DataKinds #-}
4{-# LANGUAGE DeriveGeneric #-}
4{-# LANGUAGE DeriveGeneric #-}
5{-# LANGUAGE FlexibleContexts #-}
5{-# LANGUAGE FlexibleContexts #-}
@@ -23,6 +23,7 @@ module Servant.Docs.Internal where
23import Control.Applicative
23import Control.Applicative
24#endif
24#endif
25import Control.Lens
25import Control.Lens
26+import Data.ByteString.Conversion (ToByteString, toByteString)
26import Data.ByteString.Lazy.Char8 (ByteString)
27import Data.ByteString.Lazy.Char8 (ByteString)
27import qualified Data.CaseInsensitive as CI
28import qualified Data.CaseInsensitive as CI
28import Data.Hashable
29import Data.Hashable
@@ -32,7 +33,6 @@ import Data.Maybe
32import Data.Monoid
33import Data.Monoid
33import Data.Ord (comparing)
34import Data.Ord (comparing)
34import Data.Proxy
35import Data.Proxy
35−import Data.ByteString.Conversion (ToByteString, toByteString)
36import Data.String.Conversions
36import Data.String.Conversions
37import Data.Text (Text, pack, unpack)
37import Data.Text (Text, pack, unpack)
38import GHC.Exts (Constraint)
38import GHC.Exts (Constraint)
servant-examples/Setup.hs+1−1
@@ -1,2 +1,2 @@
1−import Distribution.Simple
1+import Distribution.Simple
2main = defaultMain
2main = defaultMain
servant-examples/auth-combinator/auth-combinator.hs+15−15
@@ -1,19 +1,19 @@
1−{-# LANGUAGE DataKinds #-}
1+{-# LANGUAGE DataKinds #-}
2−{-# LANGUAGE TypeFamilies #-}
3−{-# LANGUAGE DeriveGeneric #-}
2+{-# LANGUAGE DeriveGeneric #-}
4−{-# LANGUAGE TypeOperators #-}
5−{-# LANGUAGE FlexibleInstances #-}
3+{-# LANGUAGE FlexibleInstances #-}
6−{-# LANGUAGE OverloadedStrings #-}
4+{-# LANGUAGE OverloadedStrings #-}
7{-# LANGUAGE ScopedTypeVariables #-}
5{-# LANGUAGE ScopedTypeVariables #-}
6+{-# LANGUAGE TypeFamilies #-}
7+{-# LANGUAGE TypeOperators #-}
8−import Data.Aeson
8+import Data.Aeson
9−import Data.ByteString (ByteString)
9+import Data.ByteString (ByteString)
10−import Data.Text (Text)
10+import Data.Text (Text)
11−import GHC.Generics
11+import GHC.Generics
12−import Network.HTTP.Types
12+import Network.HTTP.Types
13−import Network.Wai
13+import Network.Wai
14−import Network.Wai.Handler.Warp
14+import Network.Wai.Handler.Warp
15−import Servant
15+import Servant
16−import Servant.Server.Internal
16+import Servant.Server.Internal
17
17
18-- Pretty much stolen/adapted from
18-- Pretty much stolen/adapted from
19-- https://github.com/haskell-servant/HaskellSGMeetup2015/blob/master/examples/authentication-combinator/AuthenticationCombinator.hs
19-- https://github.com/haskell-servant/HaskellSGMeetup2015/blob/master/examples/authentication-combinator/AuthenticationCombinator.hs
servant-examples/hackage/hackage.hs+17−17
@@ -1,21 +1,21 @@
1−{-# LANGUAGE DataKinds #-}
1+{-# LANGUAGE DataKinds #-}
2−{-# LANGUAGE DeriveGeneric #-}
2+{-# LANGUAGE DeriveGeneric #-}
3−{-# LANGUAGE TypeOperators #-}
4{-# LANGUAGE OverloadedStrings #-}
3{-# LANGUAGE OverloadedStrings #-}
4+{-# LANGUAGE TypeOperators #-}
5−import Control.Applicative
5+import Control.Applicative
6−import Control.Monad
6+import Control.Monad
7−import Control.Monad.IO.Class
7+import Control.Monad.IO.Class
8−import Control.Monad.Trans.Either
8+import Control.Monad.Trans.Either
9−import Data.Aeson
9+import Data.Aeson
10−import Data.Monoid
10+import Data.Monoid
11−import Data.Proxy
11+import Data.Proxy
12−import Data.Text (Text)
12+import Data.Text (Text)
13−import GHC.Generics
13+import GHC.Generics
14−import Servant.API
14+import Servant.API
15−import Servant.Client
15+import Servant.Client
16−
16+
17−import qualified Data.Text as T
17+import qualified Data.Text as T
18−import qualified Data.Text.IO as T
18+import qualified Data.Text.IO as T
19
19
20type HackageAPI =
20type HackageAPI =
21 "users" :> Get '[JSON] [UserSummary]
21 "users" :> Get '[JSON] [UserSummary]
servant-examples/socket-io-chat/socket-io-chat.hs+12−12
@@ -1,24 +1,24 @@
1−{-# LANGUAGE CPP #-}
1+{-# LANGUAGE CPP #-}
2+{-# LANGUAGE DataKinds #-}
2{-# LANGUAGE OverloadedStrings #-}
3{-# LANGUAGE OverloadedStrings #-}
3−{-# LANGUAGE DataKinds #-}
4−{-# LANGUAGE TypeOperators #-}
4+{-# LANGUAGE TypeOperators #-}
5
5
6
6
7−import Data.Monoid ((<>))
7+import Data.Monoid ((<>))
8#if !MIN_VERSION_base(4,8,0)
8#if !MIN_VERSION_base(4,8,0)
9−import Control.Applicative((<$>))
9+import Control.Applicative ((<$>))
10#endif
10#endif
11−import Network.Wai
12−import Servant
13−import Network.EngineIO.Wai
11+import Network.EngineIO.Wai
12+import Network.Wai
14−import Network.Wai.Handler.Warp (run)
13+import Network.Wai.Handler.Warp (run)
14+import Servant
15
15
16
16
17−import qualified Control.Concurrent.STM as STM
17+import qualified Control.Concurrent.STM as STM
18−import qualified Network.SocketIO as SocketIO
18+import qualified Network.SocketIO as SocketIO
19
19
20
20
21−import Chat (eioServer, ServerState (..))
21+import Chat (ServerState (..), eioServer)
22
22
23
23
24type API = "socket.io" :> Raw
24type API = "socket.io" :> Raw
servant-examples/tutorial/T1.hs+11−11
@@ -1,19 +1,19 @@
1−{-# LANGUAGE DataKinds #-}
1+{-# LANGUAGE DataKinds #-}
2−{-# LANGUAGE TypeFamilies #-}
3{-# LANGUAGE DeriveGeneric #-}
2{-# LANGUAGE DeriveGeneric #-}
3+{-# LANGUAGE TypeFamilies #-}
4{-# LANGUAGE TypeOperators #-}
4{-# LANGUAGE TypeOperators #-}
5module T1 where
5module T1 where
6
6
7−import Data.Aeson
7+import Data.Aeson
8−import Data.Time.Calendar
8+import Data.Time.Calendar
9−import GHC.Generics
9+import GHC.Generics
10−import Network.Wai
10+import Network.Wai
11−import Servant
11+import Servant
12
12
13data User = User
13data User = User
14− { name :: String
14+ { name :: String
15− , age :: Int
15+ , age :: Int
16− , email :: String
16+ , email :: String
17 , registration_date :: Day
17 , registration_date :: Day
18 } deriving (Eq, Show, Generic)
18 } deriving (Eq, Show, Generic)
19
19
@@ -27,7 +27,7 @@ instance ToJSON User
27type UserAPI = "users" :> Get '[JSON] [User]
27type UserAPI = "users" :> Get '[JSON] [User]
28
28
29users :: [User]
29users :: [User]
30−users =
30+users =
31 [ User "Isaac Newton" 372 "isaac@newton.co.uk" (fromGregorian 1683 3 1)
31 [ User "Isaac Newton" 372 "isaac@newton.co.uk" (fromGregorian 1683 3 1)
32 , User "Albert Einstein" 136 "ae@mc2.org" (fromGregorian 1905 12 1)
32 , User "Albert Einstein" 136 "ae@mc2.org" (fromGregorian 1905 12 1)
33 ]
33 ]
servant-examples/tutorial/T10.hs+12−12
@@ -1,18 +1,18 @@
1−{-# LANGUAGE DataKinds #-}
1+{-# LANGUAGE DataKinds #-}
2−{-# LANGUAGE TypeFamilies #-}
3−{-# LANGUAGE TypeOperators #-}
4−{-# LANGUAGE FlexibleInstances #-}
2+{-# LANGUAGE FlexibleInstances #-}
5−{-# LANGUAGE OverloadedStrings #-}
6{-# LANGUAGE MultiParamTypeClasses #-}
3{-# LANGUAGE MultiParamTypeClasses #-}
4+{-# LANGUAGE OverloadedStrings #-}
5+{-# LANGUAGE TypeFamilies #-}
6+{-# LANGUAGE TypeOperators #-}
7module T10 where
7module T10 where
8
8
9−import Data.ByteString.Lazy (ByteString)
9+import Data.ByteString.Lazy (ByteString)
10−import Data.Text.Lazy (pack)
10+import Data.Text.Lazy (pack)
11−import Data.Text.Lazy.Encoding (encodeUtf8)
11+import Data.Text.Lazy.Encoding (encodeUtf8)
12−import Network.HTTP.Types
12+import Network.HTTP.Types
13−import Network.Wai
13+import Network.Wai
14−import Servant
14+import Servant
15−import Servant.Docs
15+import Servant.Docs
16import qualified T3
16import qualified T3
17
17
18type DocsAPI = T3.API :<|> Raw
18type DocsAPI = T3.API :<|> Raw
servant-examples/tutorial/T2.hs+10−10
@@ -1,19 +1,19 @@
1−{-# LANGUAGE DataKinds #-}
1+{-# LANGUAGE DataKinds #-}
2−{-# LANGUAGE TypeFamilies #-}
3{-# LANGUAGE DeriveGeneric #-}
2{-# LANGUAGE DeriveGeneric #-}
3+{-# LANGUAGE TypeFamilies #-}
4{-# LANGUAGE TypeOperators #-}
4{-# LANGUAGE TypeOperators #-}
5module T2 where
5module T2 where
6
6
7−import Data.Aeson
7+import Data.Aeson
8−import Data.Time.Calendar
8+import Data.Time.Calendar
9−import GHC.Generics
9+import GHC.Generics
10−import Network.Wai
10+import Network.Wai
11−import Servant
11+import Servant
12
12
13data User = User
13data User = User
14− { name :: String
14+ { name :: String
15− , age :: Int
15+ , age :: Int
16− , email :: String
16+ , email :: String
17 , registration_date :: Day
17 , registration_date :: Day
18 } deriving (Eq, Show, Generic)
18 } deriving (Eq, Show, Generic)
19
19
servant-examples/tutorial/T3.hs+14−14
@@ -1,15 +1,15 @@
1−{-# LANGUAGE DataKinds #-}
1+{-# LANGUAGE DataKinds #-}
2−{-# LANGUAGE TypeFamilies #-}
3{-# LANGUAGE DeriveGeneric #-}
2{-# LANGUAGE DeriveGeneric #-}
3+{-# LANGUAGE TypeFamilies #-}
4{-# LANGUAGE TypeOperators #-}
4{-# LANGUAGE TypeOperators #-}
5module T3 where
5module T3 where
6
6
7−import Control.Monad.Trans.Either
7+import Control.Monad.Trans.Either
8−import Data.Aeson
8+import Data.Aeson
9−import Data.List
9+import Data.List
10−import GHC.Generics
10+import GHC.Generics
11−import Network.Wai
11+import Network.Wai
12−import Servant
12+import Servant
13
13
14data Position = Position
14data Position = Position
15 { x :: Int
15 { x :: Int
@@ -26,9 +26,9 @@ instance FromJSON HelloMessage
26instance ToJSON HelloMessage
26instance ToJSON HelloMessage
27
27
28data ClientInfo = ClientInfo
28data ClientInfo = ClientInfo
29− { name :: String
29+ { name :: String
30− , email :: String
30+ , email :: String
31− , age :: Int
31+ , age :: Int
32 , interested_in :: [String]
32 , interested_in :: [String]
33 } deriving (Show, Generic)
33 } deriving (Show, Generic)
34
34
@@ -36,10 +36,10 @@ instance FromJSON ClientInfo
36instance ToJSON ClientInfo
36instance ToJSON ClientInfo
37
37
38data Email = Email
38data Email = Email
39− { from :: String
39+ { from :: String
40− , to :: String
40+ , to :: String
41 , subject :: String
41 , subject :: String
42− , body :: String
42+ , body :: String
43 } deriving (Show, Generic)
43 } deriving (Show, Generic)
44
44
45instance FromJSON Email
45instance FromJSON Email
servant-examples/tutorial/T4.hs+11−11
@@ -1,18 +1,18 @@
1−{-# LANGUAGE DataKinds #-}
1+{-# LANGUAGE DataKinds #-}
2−{-# LANGUAGE TypeFamilies #-}
3−{-# LANGUAGE DeriveGeneric #-}
2+{-# LANGUAGE DeriveGeneric #-}
4−{-# LANGUAGE TypeOperators #-}
5{-# LANGUAGE FlexibleInstances #-}
3{-# LANGUAGE FlexibleInstances #-}
6{-# LANGUAGE OverloadedStrings #-}
4{-# LANGUAGE OverloadedStrings #-}
5+{-# LANGUAGE TypeFamilies #-}
6+{-# LANGUAGE TypeOperators #-}
7module T4 where
7module T4 where
8
8
9−import Data.Aeson
9+import Data.Aeson
10−import Data.Foldable (foldMap)
10+import Data.Foldable (foldMap)
11−import GHC.Generics
11+import GHC.Generics
12−import Lucid
12+import Lucid
13−import Network.Wai
13+import Network.Wai
14−import Servant
14+import Servant
15−import Servant.HTML.Lucid
15+import Servant.HTML.Lucid
16
16
17data Person = Person
17data Person = Person
18 { firstName :: String
18 { firstName :: String
servant-examples/tutorial/T5.hs+11−11
@@ -1,17 +1,17 @@
1−{-# LANGUAGE DataKinds #-}
1+{-# LANGUAGE DataKinds #-}
2−{-# LANGUAGE TypeFamilies #-}
3−{-# LANGUAGE DeriveGeneric #-}
2+{-# LANGUAGE DeriveGeneric #-}
4−{-# LANGUAGE TypeOperators #-}
5{-# LANGUAGE OverloadedStrings #-}
3{-# LANGUAGE OverloadedStrings #-}
4+{-# LANGUAGE TypeFamilies #-}
5+{-# LANGUAGE TypeOperators #-}
6module T5 where
6module T5 where
7
7
8−import Control.Monad.IO.Class
8+import Control.Monad.IO.Class
9−import Control.Monad.Trans.Either
9+import Control.Monad.Trans.Either
10−import Data.Aeson
10+import Data.Aeson
11−import GHC.Generics
11+import GHC.Generics
12−import Network.Wai
12+import Network.Wai
13−import Servant
13+import Servant
14−import System.Directory
14+import System.Directory
15
15
16type IOAPI = "myfile.txt" :> Get '[JSON] FileContent
16type IOAPI = "myfile.txt" :> Get '[JSON] FileContent
17
17
servant-examples/tutorial/T6.hs+4−4
@@ -1,10 +1,10 @@
1−{-# LANGUAGE DataKinds #-}
1+{-# LANGUAGE DataKinds #-}
2−{-# LANGUAGE TypeFamilies #-}
2+{-# LANGUAGE TypeFamilies #-}
3{-# LANGUAGE TypeOperators #-}
3{-# LANGUAGE TypeOperators #-}
4module T6 where
4module T6 where
5
5
6−import Network.Wai
6+import Network.Wai
7−import Servant
7+import Servant
8
8
9type API = "code" :> Raw
9type API = "code" :> Raw
10
10
servant-examples/tutorial/T7.hs+6−6
@@ -1,12 +1,12 @@
1−{-# LANGUAGE DataKinds #-}
1+{-# LANGUAGE DataKinds #-}
2−{-# LANGUAGE TypeFamilies #-}
2+{-# LANGUAGE TypeFamilies #-}
3{-# LANGUAGE TypeOperators #-}
3{-# LANGUAGE TypeOperators #-}
4module T7 where
4module T7 where
5
5
6−import Control.Monad.Trans.Either
6+import Control.Monad.Trans.Either
7−import Control.Monad.Trans.Reader
7+import Control.Monad.Trans.Reader
8−import Network.Wai
8+import Network.Wai
9−import Servant
9+import Servant
10
10
11type ReaderAPI = "a" :> Get '[JSON] Int
11type ReaderAPI = "a" :> Get '[JSON] Int
12 :<|> "b" :> Get '[JSON] String
12 :<|> "b" :> Get '[JSON] String
servant-examples/tutorial/T8.hs+7−7
@@ -1,14 +1,14 @@
1−{-# LANGUAGE DataKinds #-}
1+{-# LANGUAGE DataKinds #-}
2−{-# LANGUAGE TypeFamilies #-}
2+{-# LANGUAGE TypeFamilies #-}
3{-# LANGUAGE TypeOperators #-}
3{-# LANGUAGE TypeOperators #-}
4module T8 where
4module T8 where
5
5
6−import Control.Monad.Trans.Either
6+import Control.Monad.Trans.Either
7−import Data.Aeson
7+import Data.Aeson
8−import Servant
8+import Servant
9−import Servant.Client
9+import Servant.Client
10
10
11−import T3
11+import T3
12
12
13position :: Int -- ^ value for "x"
13position :: Int -- ^ value for "x"
14 -> Int -- ^ value for "y"
14 -> Int -- ^ value for "y"
servant-examples/tutorial/T9.hs+14−14
@@ -1,20 +1,20 @@
1−{-# LANGUAGE DataKinds #-}
1+{-# LANGUAGE DataKinds #-}
2−{-# LANGUAGE TypeFamilies #-}
3−{-# LANGUAGE DeriveGeneric #-}
2+{-# LANGUAGE DeriveGeneric #-}
4−{-# LANGUAGE TypeOperators #-}
5{-# LANGUAGE OverloadedStrings #-}
3{-# LANGUAGE OverloadedStrings #-}
4+{-# LANGUAGE TypeFamilies #-}
5+{-# LANGUAGE TypeOperators #-}
6module T9 where
6module T9 where
7
7
8−import Control.Applicative
8+import Control.Applicative
9−import Control.Monad.IO.Class
9+import Control.Monad.IO.Class
10−import Data.Aeson
10+import Data.Aeson
11−import Data.Text (Text)
11+import Data.Text (Text)
12−import GHC.Generics
12+import GHC.Generics
13−import Network.Wai
13+import Network.Wai
14−import Servant
14+import Servant
15−import Servant.JS
15+import Servant.JS
16−import Servant.JS.JQuery
16+import Servant.JS.JQuery
17−import System.Random
17+import System.Random
18
18
19import qualified Data.Text as T
19import qualified Data.Text as T
20import qualified Language.Javascript.JQuery as JQ
20import qualified Language.Javascript.JQuery as JQ
servant-examples/tutorial/t8-main.hs+1−1
@@ -1,4 +1,4 @@
1−import T8
1+import T8
2
2
3main :: IO ()
3main :: IO ()
4main = run
4main = run
servant-examples/tutorial/tutorial.hs+4−4
@@ -1,8 +1,9 @@
1−import Network.Wai
1+import Network.Wai
2−import Network.Wai.Handler.Warp
2+import Network.Wai.Handler.Warp
3−import System.Environment
3+import System.Environment
4
4
5import qualified T1
5import qualified T1
6+import qualified T10
6import qualified T2
7import qualified T2
7import qualified T3
8import qualified T3
8import qualified T4
9import qualified T4
@@ -10,7 +11,6 @@ import qualified T5
10import qualified T6
11import qualified T6
11import qualified T7
12import qualified T7
12import qualified T9
13import qualified T9
13−import qualified T10
14
14
15app :: String -> (Application -> IO ()) -> IO ()
15app :: String -> (Application -> IO ()) -> IO ()
16app n f = case n of
16app n f = case n of
servant-examples/wai-middleware/wai-middleware.hs+9−9
@@ -1,13 +1,13 @@
1−{-# LANGUAGE DataKinds #-}
1+{-# LANGUAGE DataKinds #-}
2−{-# LANGUAGE DeriveGeneric #-}
2+{-# LANGUAGE DeriveGeneric #-}
3{-# LANGUAGE OverloadedStrings #-}
3{-# LANGUAGE OverloadedStrings #-}
4−import Data.Aeson
4+import Data.Aeson
5−import Data.Text
5+import Data.Text
6−import GHC.Generics
6+import GHC.Generics
7−import Network.Wai
7+import Network.Wai
8−import Network.Wai.Handler.Warp
8+import Network.Wai.Handler.Warp
9−import Network.Wai.Middleware.RequestLogger
9+import Network.Wai.Middleware.RequestLogger
10−import Servant
10+import Servant
11
11
12data Product = Product
12data Product = Product
13 { name :: Text
13 { name :: Text
servant-js/Setup.hs+1−1
@@ -1,2 +1,2 @@
1−import Distribution.Simple
1+import Distribution.Simple
2main = defaultMain
2main = defaultMain
servant-js/examples/counter.hs+17−17
@@ -1,19 +1,19 @@
1−{-# LANGUAGE DataKinds #-}
1+{-# LANGUAGE DataKinds #-}
2−{-# LANGUAGE TypeOperators #-}
3−{-# LANGUAGE DeriveGeneric #-}
2+{-# LANGUAGE DeriveGeneric #-}
4{-# LANGUAGE GeneralizedNewtypeDeriving #-}
3{-# LANGUAGE GeneralizedNewtypeDeriving #-}
5−
4+{-# LANGUAGE TypeOperators #-}
5+
6−import Control.Concurrent.STM
6+import Control.Concurrent.STM
7−import Control.Monad.IO.Class
7+import Control.Monad.IO.Class
8−import Data.Aeson
8+import Data.Aeson
9−import Data.Proxy
9+import Data.Proxy
10−import GHC.Generics
10+import GHC.Generics
11−import Network.Wai.Handler.Warp (run)
11+import Network.Wai.Handler.Warp (run)
12−import Servant
12+import Servant
13−import Servant.JS
13+import Servant.JS
14−import qualified Servant.JS as SJS
14+import qualified Servant.JS as SJS
15−import qualified Servant.JS.Angular as NG
15+import qualified Servant.JS.Angular as NG
16−import System.FilePath
16+import System.FilePath
17
17
18-- * A simple Counter data type
18-- * A simple Counter data type
19newtype Counter = Counter { value :: Int }
19newtype Counter = Counter { value :: Int }
@@ -43,7 +43,7 @@ type TestApi = "counter" :> Post '[JSON] Counter -- endpoint for increasing the
43 :<|> "counter" :> Get '[JSON] Counter -- endpoint to get the current value
43 :<|> "counter" :> Get '[JSON] Counter -- endpoint to get the current value
44
44
45type TestApi' = TestApi
45type TestApi' = TestApi
46− :<|> Raw -- used for serving static files
46+ :<|> Raw -- used for serving static files
47
47
48-- this proxy only targets the proper endpoints of our API,
48-- this proxy only targets the proper endpoints of our API,
49-- not the static file serving bit
49-- not the static file serving bit
@@ -82,7 +82,7 @@ writeServiceJS fp =
82 (defCommonGeneratorOptions { SJS.moduleName = "counterApp" })
82 (defCommonGeneratorOptions { SJS.moduleName = "counterApp" })
83 )
83 )
84 fp
84 fp
85−
85+
86main :: IO ()
86main :: IO ()
87main = do
87main = do
88 -- write the JS code to www/api.js at startup
88 -- write the JS code to www/api.js at startup
servant-js/src/Servant/JS.hs+11−11
@@ -1,7 +1,7 @@
1−{-# LANGUAGE DataKinds #-}
1+{-# LANGUAGE DataKinds #-}
2−{-# LANGUAGE TypeOperators #-}
3−{-# LANGUAGE FlexibleContexts #-}
2+{-# LANGUAGE FlexibleContexts #-}
4{-# LANGUAGE FlexibleInstances #-}
3{-# LANGUAGE FlexibleInstances #-}
4+{-# LANGUAGE TypeOperators #-}
5-----------------------------------------------------------------------------
5-----------------------------------------------------------------------------
6-- |
6-- |
7-- Module : Servant.JS
7-- Module : Servant.JS
@@ -114,13 +114,13 @@ module Servant.JS
114 , AjaxReq
114 , AjaxReq
115 ) where
115 ) where
116
116
117−import Data.Proxy
117+import Data.Proxy
118−import Servant.API
118+import Servant.API
119−import Servant.JS.Angular
119+import Servant.JS.Angular
120−import Servant.JS.Axios
120+import Servant.JS.Axios
121−import Servant.JS.Internal
121+import Servant.JS.Internal
122−import Servant.JS.JQuery
122+import Servant.JS.JQuery
123−import Servant.JS.Vanilla
123+import Servant.JS.Vanilla
124
124
125-- | Generate the data necessary to generate javascript code
125-- | Generate the data necessary to generate javascript code
126-- for all the endpoints of an API, as ':<|>'-separated values
126-- for all the endpoints of an API, as ':<|>'-separated values
@@ -160,6 +160,6 @@ instance (GenerateList start, GenerateList rest) => GenerateList (start :<|> res
160 generateList (start :<|> rest) = (generateList start) ++ (generateList rest)
160 generateList (start :<|> rest) = (generateList start) ++ (generateList rest)
161
161
162-- | Generate the necessary data for JS codegen as a list, each 'AjaxReq'
162-- | Generate the necessary data for JS codegen as a list, each 'AjaxReq'
163−-- describing one endpoint from your API type.
163+-- describing one endpoint from your API type.
164listFromAPI :: (HasJS api, GenerateList (JS api)) => Proxy api -> [AjaxReq]
164listFromAPI :: (HasJS api, GenerateList (JS api)) => Proxy api -> [AjaxReq]
165listFromAPI p = generateList (javascript p)
165listFromAPI p = generateList (javascript p)
servant-js/src/Servant/JS/Angular.hs+13−13
@@ -1,16 +1,16 @@
1module Servant.JS.Angular where
1module Servant.JS.Angular where
2
2
3−import Servant.JS.Internal
4−import Control.Lens
3+import Control.Lens
5−import Data.List
4+import Data.List
6−import Data.Monoid
5+import Data.Monoid
6+import Servant.JS.Internal
7
7
8-- | Options specific to the angular code generator
8-- | Options specific to the angular code generator
9data AngularOptions = AngularOptions
9data AngularOptions = AngularOptions
10 { serviceName :: String -- ^ When generating code with wrapInService,
10 { serviceName :: String -- ^ When generating code with wrapInService,
11 -- name of the service to generate
11 -- name of the service to generate
12− , prologue :: String -> String -> String -- ^ beginning of the service definition
12+ , prologue :: String -> String -> String -- ^ beginning of the service definition
13− , epilogue :: String -- ^ end of the service definition
13+ , epilogue :: String -- ^ end of the service definition
14 }
14 }
15
15
16-- | Default options for the Angular codegen. Used by 'wrapInService'.
16-- | Default options for the Angular codegen. Used by 'wrapInService'.
@@ -31,7 +31,7 @@ angularService ngOpts = angularServiceWith ngOpts defCommonGeneratorOptions
31-- | Instead of simply generating top level functions, generates a service instance
31-- | Instead of simply generating top level functions, generates a service instance
32-- on which your controllers can depend to access your API
32-- on which your controllers can depend to access your API
33angularServiceWith :: AngularOptions -> CommonGeneratorOptions -> JavaScriptGenerator
33angularServiceWith :: AngularOptions -> CommonGeneratorOptions -> JavaScriptGenerator
34−angularServiceWith ngOpts opts reqs =
34+angularServiceWith ngOpts opts reqs =
35 prologue ngOpts svc mName
35 prologue ngOpts svc mName
36 <> intercalate "," (map generator reqs) <>
36 <> intercalate "," (map generator reqs) <>
37 epilogue ngOpts
37 epilogue ngOpts
@@ -54,7 +54,7 @@ angularWith ngopts opts = intercalate "\n\n" . map (generateAngularJSWith ngopts
54-- | js codegen using $http service from Angular using default options
54-- | js codegen using $http service from Angular using default options
55generateAngularJS :: AngularOptions -> AjaxReq -> String
55generateAngularJS :: AngularOptions -> AjaxReq -> String
56generateAngularJS ngOpts = generateAngularJSWith ngOpts defCommonGeneratorOptions
56generateAngularJS ngOpts = generateAngularJSWith ngOpts defCommonGeneratorOptions
57−
57+
58-- | js codegen using $http service from Angular
58-- | js codegen using $http service from Angular
59generateAngularJSWith :: AngularOptions -> CommonGeneratorOptions -> AjaxReq -> String
59generateAngularJSWith :: AngularOptions -> CommonGeneratorOptions -> AjaxReq -> String
60generateAngularJSWith ngOptions opts req = "\n" <>
60generateAngularJSWith ngOptions opts req = "\n" <>
@@ -74,7 +74,7 @@ generateAngularJSWith ngOptions opts req = "\n" <>
74 ++ map (view argName) queryparams
74 ++ map (view argName) queryparams
75 ++ body
75 ++ body
76 ++ map (toValidFunctionName . (<>) "header" . headerArgName) hs
76 ++ map (toValidFunctionName . (<>) "header" . headerArgName) hs
77−
77+
78 -- If we want to generate Top Level Function, they must depend on
78 -- If we want to generate Top Level Function, they must depend on
79 -- the $http service, if we generate a service, the functions will
79 -- the $http service, if we generate a service, the functions will
80 -- inherit this dependency from the service
80 -- inherit this dependency from the service
@@ -118,13 +118,13 @@ generateAngularJSWith ngOptions opts req = "\n" <>
118 else (moduleName opts) <> "."
118 else (moduleName opts) <> "."
119 where
119 where
120 hasNoModule = null (moduleName opts)
120 hasNoModule = null (moduleName opts)
121−
121+
122 hasService = not $ null (serviceName ngOptions)
122 hasService = not $ null (serviceName ngOptions)
123−
123+
124 fsep = if hasService then ":" else " ="
124 fsep = if hasService then ":" else " ="
125−
125+
126 fname = namespace <> (functionNameBuilder opts $ req ^. funcName)
126 fname = namespace <> (functionNameBuilder opts $ req ^. funcName)
127−
127+
128 method = req ^. reqMethod
128 method = req ^. reqMethod
129 url = if url' == "'" then "'/'" else url'
129 url = if url' == "'" then "'/'" else url'
130 url' = "'"
130 url' = "'"
servant-js/src/Servant/JS/Axios.hs+12−12
@@ -1,10 +1,10 @@
1module Servant.JS.Axios where
1module Servant.JS.Axios where
2
2
3−import Servant.JS.Internal
4−import Control.Lens
3+import Control.Lens
5−import Data.Char (toLower)
4+import Data.Char (toLower)
6−import Data.List
5+import Data.List
7−import Data.Monoid
6+import Data.Monoid
7+import Servant.JS.Internal
8
8
9-- | Axios 'configuration' type
9-- | Axios 'configuration' type
10-- Let you customize the generation using Axios capabilities
10-- Let you customize the generation using Axios capabilities
@@ -13,9 +13,9 @@ data AxiosOptions = AxiosOptions
13 -- should be made using credentials
13 -- should be made using credentials
14 withCredentials :: !Bool
14 withCredentials :: !Bool
15 -- | the name of the cookie to use as a value for xsrf token
15 -- | the name of the cookie to use as a value for xsrf token
16− , xsrfCookieName :: !(Maybe String)
16+ , xsrfCookieName :: !(Maybe String)
17 -- | the name of the header to use as a value for xsrf token
17 -- | the name of the header to use as a value for xsrf token
18− , xsrfHeaderName :: !(Maybe String)
18+ , xsrfHeaderName :: !(Maybe String)
19 }
19 }
20
20
21-- | Default instance of the AxiosOptions
21-- | Default instance of the AxiosOptions
@@ -40,7 +40,7 @@ axiosWith aopts opts = intercalate "\n\n" . map (generateAxiosJSWith aopts opts)
40-- | js codegen using axios library using default options
40-- | js codegen using axios library using default options
41generateAxiosJS :: AxiosOptions -> AjaxReq -> String
41generateAxiosJS :: AxiosOptions -> AjaxReq -> String
42generateAxiosJS aopts = generateAxiosJSWith aopts defCommonGeneratorOptions
42generateAxiosJS aopts = generateAxiosJSWith aopts defCommonGeneratorOptions
43−
43+
44-- | js codegen using axios library
44-- | js codegen using axios library
45generateAxiosJSWith :: AxiosOptions -> CommonGeneratorOptions -> AjaxReq -> String
45generateAxiosJSWith :: AxiosOptions -> CommonGeneratorOptions -> AjaxReq -> String
46generateAxiosJSWith aopts opts req = "\n" <>
46generateAxiosJSWith aopts opts req = "\n" <>
@@ -61,7 +61,7 @@ generateAxiosJSWith aopts opts req = "\n" <>
61 ++ map (view argName) queryparams
61 ++ map (view argName) queryparams
62 ++ body
62 ++ body
63 ++ map (toValidFunctionName . (<>) "header" . headerArgName) hs
63 ++ map (toValidFunctionName . (<>) "header" . headerArgName) hs
64−
64+
65 captures = map captureArg
65 captures = map captureArg
66 . filter isCapture
66 . filter isCapture
67 $ req ^. reqUrl.path
67 $ req ^. reqUrl.path
@@ -85,7 +85,7 @@ generateAxiosJSWith aopts opts req = "\n" <>
85 then " , withCredentials: true\n"
85 then " , withCredentials: true\n"
86 else ""
86 else ""
87
87
88− xsrfCookie =
88+ xsrfCookie =
89 case xsrfCookieName aopts of
89 case xsrfCookieName aopts of
90 Just name -> " , xsrfCookieName: '" <> name <> "'\n"
90 Just name -> " , xsrfCookieName: '" <> name <> "'\n"
91 Nothing -> ""
91 Nothing -> ""
@@ -111,9 +111,9 @@ generateAxiosJSWith aopts opts req = "\n" <>
111 else (moduleName opts) <> "."
111 else (moduleName opts) <> "."
112 where
112 where
113 hasNoModule = null (moduleName opts)
113 hasNoModule = null (moduleName opts)
114−
114+
115 fname = namespace <> (functionNameBuilder opts $ req ^. funcName)
115 fname = namespace <> (functionNameBuilder opts $ req ^. funcName)
116−
116+
117 method = map toLower $ req ^. reqMethod
117 method = map toLower $ req ^. reqMethod
118 url = if url' == "'" then "'/'" else url'
118 url = if url' == "'" then "'/'" else url'
119 url' = "'"
119 url' = "'"
servant-js/src/Servant/JS/JQuery.hs+4−4
@@ -1,9 +1,9 @@
1module Servant.JS.JQuery where
1module Servant.JS.JQuery where
2
2
3−import Servant.JS.Internal
4−import Control.Lens
3+import Control.Lens
5−import Data.List
4+import Data.List
6−import Data.Monoid
5+import Data.Monoid
6+import Servant.JS.Internal
7
7
8-- | Generate javascript functions that use the /jQuery/ library
8-- | Generate javascript functions that use the /jQuery/ library
9-- to make the AJAX calls. Uses 'defCommonGeneratorOptions'
9-- to make the AJAX calls. Uses 'defCommonGeneratorOptions'
servant-js/src/Servant/JS/Vanilla.hs+4−4
@@ -1,9 +1,9 @@
1module Servant.JS.Vanilla where
1module Servant.JS.Vanilla where
2
2
3−import Servant.JS.Internal
4−import Control.Lens
3+import Control.Lens
5−import Data.List
4+import Data.List
6−import Data.Monoid
5+import Data.Monoid
6+import Servant.JS.Internal
7
7
8-- | Generate vanilla javascript functions to make AJAX requests
8-- | Generate vanilla javascript functions to make AJAX requests
9-- to your API, using /XMLHttpRequest/. Uses 'defCommonGeneratorOptions'
9-- to your API, using /XMLHttpRequest/. Uses 'defCommonGeneratorOptions'
servant-js/test/Servant/JSSpec.hs+12−12
@@ -7,18 +7,18 @@
7{-# OPTIONS_GHC -fno-warn-orphans #-}
7{-# OPTIONS_GHC -fno-warn-orphans #-}
8module Servant.JSSpec where
8module Servant.JSSpec where
9
9
10−import Data.Either (isRight)
10+import Data.Either (isRight)
11−import Data.Proxy
11+import Data.Proxy
12−import Language.ECMAScript3.Parser (parseFromString)
12+import Language.ECMAScript3.Parser (parseFromString)
13−import Test.Hspec
13+import Test.Hspec
14−
14+
15−import Servant.API
15+import Servant.API
16−import Servant.JS
16+import Servant.JS
17−import qualified Servant.JS.Vanilla as JS
18−import qualified Servant.JS.JQuery as JQ
19−import qualified Servant.JS.Angular as NG
17+import qualified Servant.JS.Angular as NG
20−import qualified Servant.JS.Axios as AX
18+import qualified Servant.JS.Axios as AX
19+import qualified Servant.JS.JQuery as JQ
20+import qualified Servant.JS.Vanilla as JS
21−import Servant.JSSpec.CustomHeaders
21+import Servant.JSSpec.CustomHeaders
22
22
23type TestAPI = "simple" :> ReqBody '[JSON,FormUrlEncoded] String :> Post '[JSON] Bool
23type TestAPI = "simple" :> ReqBody '[JSON,FormUrlEncoded] String :> Post '[JSON] Bool
24 :<|> "has.extension" :> Get '[FormUrlEncoded,JSON] Bool
24 :<|> "has.extension" :> Get '[FormUrlEncoded,JSON] Bool
servant-js/test/Servant/JSSpec/CustomHeaders.hs+7−7
@@ -8,13 +8,13 @@
8
8
9module Servant.JSSpec.CustomHeaders where
9module Servant.JSSpec.CustomHeaders where
10
10
11−import Control.Lens
11+import Control.Lens
12−import Data.Monoid
12+import Data.Monoid
13−import Data.Proxy
13+import Data.Proxy
14−import GHC.TypeLits
14+import GHC.TypeLits
15−import Servant.API
15+import Servant.API
16−import Servant.JS
16+import Servant.JS
17−import Servant.JS.Internal
17+import Servant.JS.Internal
18
18
19-- | This is a hypothetical combinator that fetches an Authorization header.
19-- | This is a hypothetical combinator that fetches an Authorization header.
20-- The symbol in the header denotes what kind of authentication we are
20-- The symbol in the header denotes what kind of authentication we are
servant-lucid/Setup.hs+1−1
@@ -1,2 +1,2 @@
1−import Distribution.Simple
1+import Distribution.Simple
2main = defaultMain
2main = defaultMain
servant-mock/Setup.hs+1−1
@@ -1,2 +1,2 @@
1−import Distribution.Simple
1+import Distribution.Simple
2main = defaultMain
2main = defaultMain
servant-mock/example/main.hs+9−9
@@ -1,13 +1,13 @@
1−{-# LANGUAGE DataKinds #-}
1+{-# LANGUAGE DataKinds #-}
2−{-# LANGUAGE TypeOperators #-}
3−{-# LANGUAGE DeriveGeneric #-}
2+{-# LANGUAGE DeriveGeneric #-}
4{-# LANGUAGE GeneralizedNewtypeDeriving #-}
3{-# LANGUAGE GeneralizedNewtypeDeriving #-}
4+{-# LANGUAGE TypeOperators #-}
5−import Data.Aeson
5+import Data.Aeson
6−import GHC.Generics
6+import GHC.Generics
7−import Network.Wai.Handler.Warp
7+import Network.Wai.Handler.Warp
8−import Servant
8+import Servant
9−import Servant.Mock
9+import Servant.Mock
10−import Test.QuickCheck.Arbitrary
10+import Test.QuickCheck.Arbitrary
11
11
12newtype User = User { username :: String }
12newtype User = User { username :: String }
13 deriving (Eq, Show, Arbitrary, Generic)
13 deriving (Eq, Show, Arbitrary, Generic)
servant-server/Setup.hs+1−1
@@ -1,2 +1,2 @@
1−import Distribution.Simple
1+import Distribution.Simple
2main = defaultMain
2main = defaultMain
servant-server/example/greet.hs+15−15
@@ -1,19 +1,19 @@
1−{-# LANGUAGE DataKinds #-}
1+{-# LANGUAGE DataKinds #-}
2−{-# LANGUAGE PolyKinds #-}
3−{-# LANGUAGE TypeFamilies #-}
4−{-# LANGUAGE DeriveGeneric #-}
2+{-# LANGUAGE DeriveGeneric #-}
5−{-# LANGUAGE TypeOperators #-}
6{-# LANGUAGE OverloadedStrings #-}
3{-# LANGUAGE OverloadedStrings #-}
7−
4+{-# LANGUAGE PolyKinds #-}
5+{-# LANGUAGE TypeFamilies #-}
6+{-# LANGUAGE TypeOperators #-}
7+
8−import Data.Aeson
8+import Data.Aeson
9−import Data.Monoid
9+import Data.Monoid
10−import Data.Proxy
10+import Data.Proxy
11−import Data.Text
11+import Data.Text
12−import GHC.Generics
12+import GHC.Generics
13−import Network.Wai
13+import Network.Wai
14−import Network.Wai.Handler.Warp
14+import Network.Wai.Handler.Warp
15−
15+
16−import Servant
16+import Servant
17
17
18-- * Example
18-- * Example
19
19
servant-server/src/Servant.hs+6−6
@@ -14,9 +14,9 @@ module Servant (
14 Proxy(..),
14 Proxy(..),
15 ) where
15 ) where
16
16
17−import Data.Proxy
17+import Data.Proxy
18−import Servant.API
18+import Servant.API
19−import Servant.Common.Text
19+import Servant.Common.Text
20−import Servant.Server
20+import Servant.Server
21−import Servant.Utils.Links
21+import Servant.Utils.Links
22−import Servant.Utils.StaticFiles
22+import Servant.Utils.StaticFiles
servant-server/src/Servant/Server.hs+2−2
@@ -77,8 +77,8 @@ module Servant.Server
77
77
78 ) where
78 ) where
79
79
80−import Data.Proxy (Proxy)
80+import Data.Proxy (Proxy)
81−import Network.Wai (Application)
81+import Network.Wai (Application)
82import Servant.Server.Internal
82import Servant.Server.Internal
83import Servant.Server.Internal.Enter
83import Servant.Server.Internal.Enter
84
84
servant-server/src/Servant/Server/Internal.hs+1−1
@@ -27,7 +27,7 @@ import Control.Monad.Trans.Either (EitherT)
27import qualified Data.ByteString as B
27import qualified Data.ByteString as B
28import qualified Data.ByteString.Lazy as BL
28import qualified Data.ByteString.Lazy as BL
29import qualified Data.Map as M
29import qualified Data.Map as M
30−import Data.Maybe (catMaybes, fromMaybe)
30+import Data.Maybe (mapMaybe, fromMaybe)
31import Data.String (fromString)
31import Data.String (fromString)
32import Data.String.Conversions (cs, (<>), ConvertibleStrings)
32import Data.String.Conversions (cs, (<>), ConvertibleStrings)
33import Data.Text (Text)
33import Data.Text (Text)
servant-server/src/Servant/Server/Internal/PathInfo.hs+5−5
@@ -1,10 +1,10 @@
1−{-# LANGUAGE OverloadedStrings #-}
1+{-# LANGUAGE OverloadedStrings #-}
2module Servant.Server.Internal.PathInfo where
2module Servant.Server.Internal.PathInfo where
3
3
4−import Data.List (unfoldr)
4+import Data.List (unfoldr)
5−import Data.Text (Text)
5+import Data.Text (Text)
6−import qualified Data.Text as T
6+import qualified Data.Text as T
7−import Network.Wai (Request, pathInfo)
7+import Network.Wai (Request, pathInfo)
8
8
9-- | Like `null . pathInfo`, but works with redundant trailing slashes.
9-- | Like `null . pathInfo`, but works with redundant trailing slashes.
10pathIsEmpty :: Request -> Bool
10pathIsEmpty :: Request -> Bool
servant-server/src/Servant/Server/Internal/Router.hs+5−5
@@ -1,10 +1,10 @@
1module Servant.Server.Internal.Router where
1module Servant.Server.Internal.Router where
2
2
3−import Data.Map (Map)
3+import Data.Map (Map)
4−import qualified Data.Map as M
4+import qualified Data.Map as M
5−import Data.Monoid ((<>))
5+import Data.Monoid ((<>))
6−import Data.Text (Text)
6+import Data.Text (Text)
7−import Network.Wai (Request, pathInfo)
7+import Network.Wai (Request, pathInfo)
8import Servant.Server.Internal.PathInfo
8import Servant.Server.Internal.PathInfo
9import Servant.Server.Internal.RoutingApplication
9import Servant.Server.Internal.RoutingApplication
10
10
servant-server/src/Servant/Server/Internal/RoutingApplication.hs+17−16
@@ -5,23 +5,24 @@
5module Servant.Server.Internal.RoutingApplication where
5module Servant.Server.Internal.RoutingApplication where
6
6
7#if !MIN_VERSION_base(4,8,0)
7#if !MIN_VERSION_base(4,8,0)
8−import Control.Applicative (Applicative, (<$>))
8+import Control.Applicative (Applicative, (<$>))
9−import Data.Monoid (Monoid, mappend, mempty)
9+import Data.Monoid (Monoid, mappend, mempty)
10#endif
10#endif
11−import Control.Monad.Trans.Either (EitherT, runEitherT)
11+import Control.Monad.Trans.Either (EitherT, runEitherT)
12−import qualified Data.ByteString as B
12+import qualified Data.ByteString as B
13−import qualified Data.ByteString.Lazy as BL
13+import qualified Data.ByteString.Lazy as BL
14−import Data.IORef (newIORef, readIORef, writeIORef)
14+import Data.IORef (newIORef, readIORef,
15+ writeIORef)
15−import Data.Maybe (fromMaybe)
16+import Data.Maybe (fromMaybe)
16−import Data.Monoid ((<>))
17+import Data.Monoid ((<>))
17−import Data.String (fromString)
18+import Data.String (fromString)
18−import Network.HTTP.Types hiding (Header, ResponseHeaders)
19+import Network.HTTP.Types hiding (Header,
20+ ResponseHeaders)
19−import Network.Wai (Application, Request, Response,
21+import Network.Wai (Application, Request,
20− ResponseReceived,
22+ Response, ResponseReceived,
21− requestBody,
23+ requestBody, responseLBS,
22− responseLBS,
23− strictRequestBody)
24+ strictRequestBody)
24−import Servant.API ((:<|>) (..))
25+import Servant.API ((:<|>) (..))
25import Servant.Server.Internal.ServantErr
26import Servant.Server.Internal.ServantErr
26
27
27type RoutingApplication =
28type RoutingApplication =
servant-server/src/Servant/Server/Internal/ServantErr.hs+4−4
@@ -2,10 +2,10 @@
2{-# LANGUAGE RecordWildCards #-}
2{-# LANGUAGE RecordWildCards #-}
3module Servant.Server.Internal.ServantErr where
3module Servant.Server.Internal.ServantErr where
4
4
5−import qualified Data.ByteString.Char8 as BS
5+import qualified Data.ByteString.Char8 as BS
6−import qualified Data.ByteString.Lazy as LBS
6+import qualified Data.ByteString.Lazy as LBS
7−import qualified Network.HTTP.Types as HTTP
7+import qualified Network.HTTP.Types as HTTP
8−import Network.Wai (responseLBS, Response)
8+import Network.Wai (Response, responseLBS)
9
9
10data ServantErr = ServantErr { errHTTPCode :: Int
10data ServantErr = ServantErr { errHTTPCode :: Int
11 , errReasonPhrase :: String
11 , errReasonPhrase :: String
servant-server/src/Servant/Utils/StaticFiles.hs+6−5
@@ -7,12 +7,13 @@ module Servant.Utils.StaticFiles (
7 serveDirectory,
7 serveDirectory,
8 ) where
8 ) where
9
9
10−import System.FilePath (addTrailingPathSeparator)
11−import Network.Wai.Application.Static (staticApp, defaultFileServerSettings)
10+import Network.Wai.Application.Static (defaultFileServerSettings,
11+ staticApp)
12−import Servant.API.Raw (Raw)
12+import Servant.API.Raw (Raw)
13−import Servant.Server (Server)
13+import Servant.Server (Server)
14+import System.FilePath (addTrailingPathSeparator)
14#if !MIN_VERSION_wai_app_static(3,1,0)
15#if !MIN_VERSION_wai_app_static(3,1,0)
15−import Filesystem.Path.CurrentOS (decodeString)
16+import Filesystem.Path.CurrentOS (decodeString)
16#endif
17#endif
17
18
18-- | Serve anything under the specified directory as a 'Raw' endpoint.
19-- | Serve anything under the specified directory as a 'Raw' endpoint.
servant-server/test/Doctests.hs+1−1
@@ -1,6 +1,6 @@
1module Main where
1module Main where
2
2
3−import Data.List (isPrefixOf)
3+import Data.List (isPrefixOf)
4import System.Directory
4import System.Directory
5import System.FilePath
5import System.FilePath
6import System.FilePath.Find
6import System.FilePath.Find
servant-server/test/Servant/Server/Internal/EnterSpec.hs+4−4
@@ -3,16 +3,16 @@
3{-# LANGUAGE TypeOperators #-}
3{-# LANGUAGE TypeOperators #-}
4module Servant.Server.Internal.EnterSpec where
4module Servant.Server.Internal.EnterSpec where
5
5
6−import qualified Control.Category as C
6+import qualified Control.Category as C
7import Control.Monad.Reader
7import Control.Monad.Reader
8import Control.Monad.Trans.Either
8import Control.Monad.Trans.Either
9import Data.Proxy
9import Data.Proxy
10import Servant.API
10import Servant.API
11import Servant.Server
11import Servant.Server
12
12
13−import Test.Hspec (Spec, describe, it)
13+import Test.Hspec (Spec, describe, it)
14−import Test.Hspec.Wai (get, matchStatus, post,
14+import Test.Hspec.Wai (get, matchStatus, post,
15− shouldRespondWith, with)
15+ shouldRespondWith, with)
16
16
17spec :: Spec
17spec :: Spec
18spec = describe "module Servant.Server.Enter" $ do
18spec = describe "module Servant.Server.Enter" $ do
servant-server/test/Servant/Utils/StaticFilesSpec.hs+20−18
@@ -1,27 +1,29 @@
1−{-# LANGUAGE DataKinds #-}
1+{-# LANGUAGE DataKinds #-}
2{-# LANGUAGE FlexibleInstances #-}
2{-# LANGUAGE FlexibleInstances #-}
3{-# LANGUAGE OverloadedStrings #-}
3{-# LANGUAGE OverloadedStrings #-}
4−{-# LANGUAGE TypeOperators #-}
4+{-# LANGUAGE TypeOperators #-}
5{-# OPTIONS_GHC -fno-warn-orphans #-}
5{-# OPTIONS_GHC -fno-warn-orphans #-}
6module Servant.Utils.StaticFilesSpec where
6module Servant.Utils.StaticFilesSpec where
7
7
8−import Control.Exception (bracket)
8+import Control.Exception (bracket)
9−import Data.Proxy (Proxy(Proxy))
9+import Data.Proxy (Proxy (Proxy))
10−import Network.Wai (Application)
10+import Network.Wai (Application)
11+import System.Directory (createDirectory,
11−import System.Directory (getCurrentDirectory, setCurrentDirectory, createDirectory)
12+ getCurrentDirectory,
13+ setCurrentDirectory)
12−import System.IO.Temp (withSystemTempDirectory)
14+import System.IO.Temp (withSystemTempDirectory)
13−import Test.Hspec (Spec, describe, it, around_)
15+import Test.Hspec (Spec, around_, describe, it)
14−import Test.Hspec.Wai (with, get, shouldRespondWith)
16+import Test.Hspec.Wai (get, shouldRespondWith, with)
15
17
16−import Servant.API (JSON)
18+import Servant.API (JSON)
17−import Servant.API.Alternative ((:<|>)((:<|>)))
19+import Servant.API.Alternative ((:<|>) ((:<|>)))
18−import Servant.API.Capture (Capture)
20+import Servant.API.Capture (Capture)
19−import Servant.API.Get (Get)
21+import Servant.API.Get (Get)
20−import Servant.API.Raw (Raw)
22+import Servant.API.Raw (Raw)
21−import Servant.API.Sub ((:>))
23+import Servant.API.Sub ((:>))
22−import Servant.Server (Server, serve)
24+import Servant.Server (Server, serve)
23−import Servant.ServerSpec (Person(Person))
25+import Servant.ServerSpec (Person (Person))
24−import Servant.Utils.StaticFiles (serveDirectory)
26+import Servant.Utils.StaticFiles (serveDirectory)
25
27
26type Api =
28type Api =
27 "dummy_api" :> Capture "person_name" String :> Get '[JSON] Person
29 "dummy_api" :> Capture "person_name" String :> Get '[JSON] Person
servant/Setup.hs+1−1
@@ -1,2 +1,2 @@
1−import Distribution.Simple
1+import Distribution.Simple
2main = defaultMain
2main = defaultMain
servant/src/Servant/API.hs+2−2
@@ -69,8 +69,8 @@ import Servant.API.ContentTypes (Accept (..), FormUrlEncoded,
69import Servant.API.Delete (Delete)
69import Servant.API.Delete (Delete)
70import Servant.API.Get (Get)
70import Servant.API.Get (Get)
71import Servant.API.Header (Header (..))
71import Servant.API.Header (Header (..))
72−import Servant.API.HttpVersion (HttpVersion(..))
72+import Servant.API.HttpVersion (HttpVersion (..))
73−import Servant.API.IsSecure (IsSecure(..))
73+import Servant.API.IsSecure (IsSecure (..))
74import Servant.API.MatrixParam (MatrixFlag, MatrixParam,
74import Servant.API.MatrixParam (MatrixFlag, MatrixParam,
75 MatrixParams)
75 MatrixParams)
76import Servant.API.Patch (Patch)
76import Servant.API.Patch (Patch)
servant/src/Servant/API/Delete.hs+1−1
@@ -4,7 +4,7 @@
4{-# OPTIONS_HADDOCK not-home #-}
4{-# OPTIONS_HADDOCK not-home #-}
5module Servant.API.Delete (Delete) where
5module Servant.API.Delete (Delete) where
6
6
7−import Data.Typeable ( Typeable )
7+import Data.Typeable (Typeable)
8
8
9-- | Combinator for DELETE requests.
9-- | Combinator for DELETE requests.
10--
10--
servant/src/Servant/API/HttpVersion.hs+1−1
@@ -3,7 +3,7 @@ module Servant.API.HttpVersion
3 HttpVersion(..)
3 HttpVersion(..)
4 ) where
4 ) where
5
5
6−import Network.HTTP.Types (HttpVersion(..))
6+import Network.HTTP.Types (HttpVersion (..))
7
7
8-- $httpversion
8-- $httpversion
9--
9--
servant/src/Servant/API/IsSecure.hs+1−1
@@ -4,7 +4,7 @@ module Servant.API.IsSecure
4 IsSecure(..)
4 IsSecure(..)
5 ) where
5 ) where
6
6
7−import Data.Typeable
7+import Data.Typeable
8
8
9-- | Was this request made over an SSL connection?
9-- | Was this request made over an SSL connection?
10--
10--
servant/src/Servant/API/Put.hs+1−1
@@ -4,7 +4,7 @@
4{-# OPTIONS_HADDOCK not-home #-}
4{-# OPTIONS_HADDOCK not-home #-}
5module Servant.API.Put (Put) where
5module Servant.API.Put (Put) where
6
6
7−import Data.Typeable ( Typeable )
7+import Data.Typeable (Typeable)
8
8
9-- | Endpoint for PUT requests, usually used to update a ressource.
9-- | Endpoint for PUT requests, usually used to update a ressource.
10-- The type @a@ is the type of the response body that's returned.
10-- The type @a@ is the type of the response body that's returned.
servant/src/Servant/API/Raw.hs+1−1
@@ -2,7 +2,7 @@
2{-# OPTIONS_HADDOCK not-home #-}
2{-# OPTIONS_HADDOCK not-home #-}
3module Servant.API.Raw where
3module Servant.API.Raw where
4
4
5−import Data.Typeable (Typeable)
5+import Data.Typeable (Typeable)
6-- | Endpoint for plugging in your own Wai 'Application's.
6-- | Endpoint for plugging in your own Wai 'Application's.
7--
7--
8-- The given 'Application' will get the request as received by the server, potentially with
8-- The given 'Application' will get the request as received by the server, potentially with
servant/src/Servant/API/RemoteHost.hs+1−1
@@ -4,7 +4,7 @@ module Servant.API.RemoteHost
4 RemoteHost
4 RemoteHost
5 ) where
5 ) where
6
6
7−import Data.Typeable
7+import Data.Typeable
8
8
9-- | Provides access to the host or IP address
9-- | Provides access to the host or IP address
10-- from which the HTTP request was sent.
10-- from which the HTTP request was sent.
servant/src/Servant/API/Vault.hs+1−1
@@ -3,7 +3,7 @@ module Servant.API.Vault
3 Vault
3 Vault
4 ) where
4 ) where
5
5
6−import Data.Vault.Lazy (Vault)
6+import Data.Vault.Lazy (Vault)
7
7
8-- $vault
8-- $vault
9--
9--
servant/test/Doctests.hs+1−1
@@ -1,6 +1,6 @@
1module Main where
1module Main where
2
2
3−import Data.List (isPrefixOf)
3+import Data.List (isPrefixOf)
4import System.Directory
4import System.Directory
5import System.FilePath
5import System.FilePath
6import System.FilePath.Find
6import System.FilePath.Find
servant/test/Servant/API/ContentTypesSpec.hs+11−11
@@ -12,22 +12,22 @@ import Data.Monoid
12#endif
12#endif
13import Control.Arrow
13import Control.Arrow
14import Data.Aeson
14import Data.Aeson
15+import Data.ByteString.Char8 (ByteString, append, pack)
16+import qualified Data.ByteString.Lazy as BSL
15import Data.Either
17import Data.Either
16−import Data.Function (on)
18+import Data.Function (on)
19+import Data.List (maximumBy)
20+import Data.Maybe (fromJust, isJust, isNothing)
17import Data.Proxy
21import Data.Proxy
18−import Data.ByteString.Char8 (ByteString, append, pack)
19−import qualified Data.ByteString.Lazy as BSL
20−import Data.List (maximumBy)
21−import Data.Maybe (fromJust, isJust, isNothing)
22−import Data.String (IsString (..))
22+import Data.String (IsString (..))
23−import Data.String.Conversions (cs)
23+import Data.String.Conversions (cs)
24−import qualified Data.Text as TextS
24+import qualified Data.Text as TextS
25−import qualified Data.Text.Lazy as TextL
25+import qualified Data.Text.Lazy as TextL
26import GHC.Generics
26import GHC.Generics
27−import Network.URL (exportParams, importParams)
27+import Network.URL (exportParams, importParams)
28import Test.Hspec
28import Test.Hspec
29import Test.QuickCheck
29import Test.QuickCheck
30−import Test.QuickCheck.Instances ()
30+import Test.QuickCheck.Instances ()
31
31
32import Servant.API.ContentTypes
32import Servant.API.ContentTypes
33
33