stylish haskell changes

And import fix.
This commit is contained in:
Julian K. Arni 2015-08-17 23:56:29 +02:00
parent 98b6e85128
commit 6eb7add53a
61 changed files with 377 additions and 373 deletions

View File

@ -1,2 +1,2 @@
import Distribution.Simple import Distribution.Simple
main = defaultMain main = defaultMain

View File

@ -1,2 +1,2 @@
import Distribution.Simple import Distribution.Simple
main = defaultMain main = defaultMain

View File

@ -11,13 +11,13 @@ module Servant.Common.BaseUrl (
, showBaseUrl , showBaseUrl
) where ) where
import Control.Monad.Catch (MonadThrow, throwM, Exception) import Control.Monad.Catch (Exception, MonadThrow, throwM)
import Data.List import Data.List
import Data.Typeable import Data.Typeable
import GHC.Generics import GHC.Generics
import Network.URI import Network.URI
import Safe import Safe
import Text.Read import Text.Read
-- | URI scheme to use -- | URI scheme to use
data Scheme = data Scheme =
@ -29,8 +29,8 @@ data Scheme =
-- for servant's automatically-generated clients. -- for servant's automatically-generated clients.
data BaseUrl = BaseUrl data BaseUrl = BaseUrl
{ baseUrlScheme :: Scheme -- ^ URI scheme to use { baseUrlScheme :: Scheme -- ^ URI scheme to use
, baseUrlHost :: String -- ^ host (eg "haskell.org") , baseUrlHost :: String -- ^ host (eg "haskell.org")
, baseUrlPort :: Int -- ^ port (eg 80) , baseUrlPort :: Int -- ^ port (eg 80)
} deriving (Show, Eq, Ord, Generic) } deriving (Show, Eq, Ord, Generic)
showBaseUrl :: BaseUrl -> String showBaseUrl :: BaseUrl -> String

View File

@ -1,15 +1,15 @@
{-# LANGUAGE CPP #-} {-# LANGUAGE CPP #-}
{-# OPTIONS_GHC -fno-warn-orphans #-} {-# OPTIONS_GHC -fno-warn-orphans #-}
module Servant.Common.BaseUrlSpec where module Servant.Common.BaseUrlSpec where
#if !MIN_VERSION_base(4,8,0) #if !MIN_VERSION_base(4,8,0)
import Control.Applicative import Control.Applicative
#endif #endif
import Control.DeepSeq import Control.DeepSeq
import Test.Hspec import Test.Hspec
import Test.QuickCheck import Test.QuickCheck
import Servant.Common.BaseUrl import Servant.Common.BaseUrl
spec :: Spec spec :: Spec
spec = do spec = do

View File

@ -1,4 +1,4 @@
import Servant.ClientSpec (spec, failSpec) import Servant.ClientSpec (failSpec, spec)
main :: IO () main :: IO ()
main = do main = do

View File

@ -1,2 +1,2 @@
import Distribution.Simple import Distribution.Simple
main = defaultMain main = defaultMain

View File

@ -166,4 +166,4 @@ module Servant.Docs
, single , single
) where ) where
import Servant.Docs.Internal import Servant.Docs.Internal

View File

@ -1,5 +1,5 @@
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE CPP #-} {-# LANGUAGE CPP #-}
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE DataKinds #-} {-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleContexts #-}
@ -23,6 +23,7 @@ module Servant.Docs.Internal where
import Control.Applicative import Control.Applicative
#endif #endif
import Control.Lens import Control.Lens
import Data.ByteString.Conversion (ToByteString, toByteString)
import Data.ByteString.Lazy.Char8 (ByteString) import Data.ByteString.Lazy.Char8 (ByteString)
import qualified Data.CaseInsensitive as CI import qualified Data.CaseInsensitive as CI
import Data.Hashable import Data.Hashable
@ -32,7 +33,6 @@ import Data.Maybe
import Data.Monoid import Data.Monoid
import Data.Ord (comparing) import Data.Ord (comparing)
import Data.Proxy import Data.Proxy
import Data.ByteString.Conversion (ToByteString, toByteString)
import Data.String.Conversions import Data.String.Conversions
import Data.Text (Text, pack, unpack) import Data.Text (Text, pack, unpack)
import GHC.Exts (Constraint) import GHC.Exts (Constraint)

View File

@ -1,2 +1,2 @@
import Distribution.Simple import Distribution.Simple
main = defaultMain main = defaultMain

View File

@ -1,19 +1,19 @@
{-# LANGUAGE DataKinds #-} {-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE TypeOperators #-} {-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE ScopedTypeVariables #-}
import Data.Aeson {-# LANGUAGE TypeFamilies #-}
import Data.ByteString (ByteString) {-# LANGUAGE TypeOperators #-}
import Data.Text (Text) import Data.Aeson
import GHC.Generics import Data.ByteString (ByteString)
import Network.HTTP.Types import Data.Text (Text)
import Network.Wai import GHC.Generics
import Network.Wai.Handler.Warp import Network.HTTP.Types
import Servant import Network.Wai
import Servant.Server.Internal import Network.Wai.Handler.Warp
import Servant
import Servant.Server.Internal
-- Pretty much stolen/adapted from -- Pretty much stolen/adapted from
-- https://github.com/haskell-servant/HaskellSGMeetup2015/blob/master/examples/authentication-combinator/AuthenticationCombinator.hs -- https://github.com/haskell-servant/HaskellSGMeetup2015/blob/master/examples/authentication-combinator/AuthenticationCombinator.hs

View File

@ -1,21 +1,21 @@
{-# LANGUAGE DataKinds #-} {-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE OverloadedStrings #-}
import Control.Applicative {-# LANGUAGE TypeOperators #-}
import Control.Monad import Control.Applicative
import Control.Monad.IO.Class import Control.Monad
import Control.Monad.Trans.Either import Control.Monad.IO.Class
import Data.Aeson import Control.Monad.Trans.Either
import Data.Monoid import Data.Aeson
import Data.Proxy import Data.Monoid
import Data.Text (Text) import Data.Proxy
import GHC.Generics import Data.Text (Text)
import Servant.API import GHC.Generics
import Servant.Client import Servant.API
import Servant.Client
import qualified Data.Text as T import qualified Data.Text as T
import qualified Data.Text.IO as T import qualified Data.Text.IO as T
type HackageAPI = type HackageAPI =
"users" :> Get '[JSON] [UserSummary] "users" :> Get '[JSON] [UserSummary]

View File

@ -1,24 +1,24 @@
{-# LANGUAGE CPP #-} {-# LANGUAGE CPP #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DataKinds #-} {-# LANGUAGE TypeOperators #-}
{-# LANGUAGE TypeOperators #-}
import Data.Monoid ((<>)) import Data.Monoid ((<>))
#if !MIN_VERSION_base(4,8,0) #if !MIN_VERSION_base(4,8,0)
import Control.Applicative((<$>)) import Control.Applicative ((<$>))
#endif #endif
import Network.Wai import Network.EngineIO.Wai
import Servant import Network.Wai
import Network.EngineIO.Wai import Network.Wai.Handler.Warp (run)
import Network.Wai.Handler.Warp (run) import Servant
import qualified Control.Concurrent.STM as STM import qualified Control.Concurrent.STM as STM
import qualified Network.SocketIO as SocketIO import qualified Network.SocketIO as SocketIO
import Chat (eioServer, ServerState (..)) import Chat (ServerState (..), eioServer)
type API = "socket.io" :> Raw type API = "socket.io" :> Raw

View File

@ -1,19 +1,19 @@
{-# LANGUAGE DataKinds #-} {-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-} {-# LANGUAGE TypeOperators #-}
module T1 where module T1 where
import Data.Aeson import Data.Aeson
import Data.Time.Calendar import Data.Time.Calendar
import GHC.Generics import GHC.Generics
import Network.Wai import Network.Wai
import Servant import Servant
data User = User data User = User
{ name :: String { name :: String
, age :: Int , age :: Int
, email :: String , email :: String
, registration_date :: Day , registration_date :: Day
} deriving (Eq, Show, Generic) } deriving (Eq, Show, Generic)
@ -27,7 +27,7 @@ instance ToJSON User
type UserAPI = "users" :> Get '[JSON] [User] type UserAPI = "users" :> Get '[JSON] [User]
users :: [User] users :: [User]
users = users =
[ User "Isaac Newton" 372 "isaac@newton.co.uk" (fromGregorian 1683 3 1) [ User "Isaac Newton" 372 "isaac@newton.co.uk" (fromGregorian 1683 3 1)
, User "Albert Einstein" 136 "ae@mc2.org" (fromGregorian 1905 12 1) , User "Albert Einstein" 136 "ae@mc2.org" (fromGregorian 1905 12 1)
] ]

View File

@ -1,18 +1,18 @@
{-# LANGUAGE DataKinds #-} {-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
module T10 where module T10 where
import Data.ByteString.Lazy (ByteString) import Data.ByteString.Lazy (ByteString)
import Data.Text.Lazy (pack) import Data.Text.Lazy (pack)
import Data.Text.Lazy.Encoding (encodeUtf8) import Data.Text.Lazy.Encoding (encodeUtf8)
import Network.HTTP.Types import Network.HTTP.Types
import Network.Wai import Network.Wai
import Servant import Servant
import Servant.Docs import Servant.Docs
import qualified T3 import qualified T3
type DocsAPI = T3.API :<|> Raw type DocsAPI = T3.API :<|> Raw

View File

@ -1,19 +1,19 @@
{-# LANGUAGE DataKinds #-} {-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-} {-# LANGUAGE TypeOperators #-}
module T2 where module T2 where
import Data.Aeson import Data.Aeson
import Data.Time.Calendar import Data.Time.Calendar
import GHC.Generics import GHC.Generics
import Network.Wai import Network.Wai
import Servant import Servant
data User = User data User = User
{ name :: String { name :: String
, age :: Int , age :: Int
, email :: String , email :: String
, registration_date :: Day , registration_date :: Day
} deriving (Eq, Show, Generic) } deriving (Eq, Show, Generic)

View File

@ -1,15 +1,15 @@
{-# LANGUAGE DataKinds #-} {-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-} {-# LANGUAGE TypeOperators #-}
module T3 where module T3 where
import Control.Monad.Trans.Either import Control.Monad.Trans.Either
import Data.Aeson import Data.Aeson
import Data.List import Data.List
import GHC.Generics import GHC.Generics
import Network.Wai import Network.Wai
import Servant import Servant
data Position = Position data Position = Position
{ x :: Int { x :: Int
@ -26,9 +26,9 @@ instance FromJSON HelloMessage
instance ToJSON HelloMessage instance ToJSON HelloMessage
data ClientInfo = ClientInfo data ClientInfo = ClientInfo
{ name :: String { name :: String
, email :: String , email :: String
, age :: Int , age :: Int
, interested_in :: [String] , interested_in :: [String]
} deriving (Show, Generic) } deriving (Show, Generic)
@ -36,10 +36,10 @@ instance FromJSON ClientInfo
instance ToJSON ClientInfo instance ToJSON ClientInfo
data Email = Email data Email = Email
{ from :: String { from :: String
, to :: String , to :: String
, subject :: String , subject :: String
, body :: String , body :: String
} deriving (Show, Generic) } deriving (Show, Generic)
instance FromJSON Email instance FromJSON Email

View File

@ -1,18 +1,18 @@
{-# LANGUAGE DataKinds #-} {-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
module T4 where module T4 where
import Data.Aeson import Data.Aeson
import Data.Foldable (foldMap) import Data.Foldable (foldMap)
import GHC.Generics import GHC.Generics
import Lucid import Lucid
import Network.Wai import Network.Wai
import Servant import Servant
import Servant.HTML.Lucid import Servant.HTML.Lucid
data Person = Person data Person = Person
{ firstName :: String { firstName :: String

View File

@ -1,17 +1,17 @@
{-# LANGUAGE DataKinds #-} {-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
module T5 where module T5 where
import Control.Monad.IO.Class import Control.Monad.IO.Class
import Control.Monad.Trans.Either import Control.Monad.Trans.Either
import Data.Aeson import Data.Aeson
import GHC.Generics import GHC.Generics
import Network.Wai import Network.Wai
import Servant import Servant
import System.Directory import System.Directory
type IOAPI = "myfile.txt" :> Get '[JSON] FileContent type IOAPI = "myfile.txt" :> Get '[JSON] FileContent

View File

@ -1,10 +1,10 @@
{-# LANGUAGE DataKinds #-} {-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-} {-# LANGUAGE TypeOperators #-}
module T6 where module T6 where
import Network.Wai import Network.Wai
import Servant import Servant
type API = "code" :> Raw type API = "code" :> Raw

View File

@ -1,12 +1,12 @@
{-# LANGUAGE DataKinds #-} {-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-} {-# LANGUAGE TypeOperators #-}
module T7 where module T7 where
import Control.Monad.Trans.Either import Control.Monad.Trans.Either
import Control.Monad.Trans.Reader import Control.Monad.Trans.Reader
import Network.Wai import Network.Wai
import Servant import Servant
type ReaderAPI = "a" :> Get '[JSON] Int type ReaderAPI = "a" :> Get '[JSON] Int
:<|> "b" :> Get '[JSON] String :<|> "b" :> Get '[JSON] String

View File

@ -1,14 +1,14 @@
{-# LANGUAGE DataKinds #-} {-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-} {-# LANGUAGE TypeOperators #-}
module T8 where module T8 where
import Control.Monad.Trans.Either import Control.Monad.Trans.Either
import Data.Aeson import Data.Aeson
import Servant import Servant
import Servant.Client import Servant.Client
import T3 import T3
position :: Int -- ^ value for "x" position :: Int -- ^ value for "x"
-> Int -- ^ value for "y" -> Int -- ^ value for "y"

View File

@ -1,20 +1,20 @@
{-# LANGUAGE DataKinds #-} {-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
module T9 where module T9 where
import Control.Applicative import Control.Applicative
import Control.Monad.IO.Class import Control.Monad.IO.Class
import Data.Aeson import Data.Aeson
import Data.Text (Text) import Data.Text (Text)
import GHC.Generics import GHC.Generics
import Network.Wai import Network.Wai
import Servant import Servant
import Servant.JS import Servant.JS
import Servant.JS.JQuery import Servant.JS.JQuery
import System.Random import System.Random
import qualified Data.Text as T import qualified Data.Text as T
import qualified Language.Javascript.JQuery as JQ import qualified Language.Javascript.JQuery as JQ

View File

@ -1,4 +1,4 @@
import T8 import T8
main :: IO () main :: IO ()
main = run main = run

View File

@ -1,8 +1,9 @@
import Network.Wai import Network.Wai
import Network.Wai.Handler.Warp import Network.Wai.Handler.Warp
import System.Environment import System.Environment
import qualified T1 import qualified T1
import qualified T10
import qualified T2 import qualified T2
import qualified T3 import qualified T3
import qualified T4 import qualified T4
@ -10,7 +11,6 @@ import qualified T5
import qualified T6 import qualified T6
import qualified T7 import qualified T7
import qualified T9 import qualified T9
import qualified T10
app :: String -> (Application -> IO ()) -> IO () app :: String -> (Application -> IO ()) -> IO ()
app n f = case n of app n f = case n of

View File

@ -1,13 +1,13 @@
{-# LANGUAGE DataKinds #-} {-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE OverloadedStrings #-}
import Data.Aeson import Data.Aeson
import Data.Text import Data.Text
import GHC.Generics import GHC.Generics
import Network.Wai import Network.Wai
import Network.Wai.Handler.Warp import Network.Wai.Handler.Warp
import Network.Wai.Middleware.RequestLogger import Network.Wai.Middleware.RequestLogger
import Servant import Servant
data Product = Product data Product = Product
{ name :: Text { name :: Text

View File

@ -1,2 +1,2 @@
import Distribution.Simple import Distribution.Simple
main = defaultMain main = defaultMain

View File

@ -1,19 +1,19 @@
{-# LANGUAGE DataKinds #-} {-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeOperators #-} {-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE TypeOperators #-}
import Control.Concurrent.STM import Control.Concurrent.STM
import Control.Monad.IO.Class import Control.Monad.IO.Class
import Data.Aeson import Data.Aeson
import Data.Proxy import Data.Proxy
import GHC.Generics import GHC.Generics
import Network.Wai.Handler.Warp (run) import Network.Wai.Handler.Warp (run)
import Servant import Servant
import Servant.JS import Servant.JS
import qualified Servant.JS as SJS import qualified Servant.JS as SJS
import qualified Servant.JS.Angular as NG import qualified Servant.JS.Angular as NG
import System.FilePath import System.FilePath
-- * A simple Counter data type -- * A simple Counter data type
newtype Counter = Counter { value :: Int } newtype Counter = Counter { value :: Int }
@ -43,7 +43,7 @@ type TestApi = "counter" :> Post '[JSON] Counter -- endpoint for increasing the
:<|> "counter" :> Get '[JSON] Counter -- endpoint to get the current value :<|> "counter" :> Get '[JSON] Counter -- endpoint to get the current value
type TestApi' = TestApi type TestApi' = TestApi
:<|> Raw -- used for serving static files :<|> Raw -- used for serving static files
-- this proxy only targets the proper endpoints of our API, -- this proxy only targets the proper endpoints of our API,
-- not the static file serving bit -- not the static file serving bit
@ -82,7 +82,7 @@ writeServiceJS fp =
(defCommonGeneratorOptions { SJS.moduleName = "counterApp" }) (defCommonGeneratorOptions { SJS.moduleName = "counterApp" })
) )
fp fp
main :: IO () main :: IO ()
main = do main = do
-- write the JS code to www/api.js at startup -- write the JS code to www/api.js at startup

View File

@ -1,7 +1,7 @@
{-# LANGUAGE DataKinds #-} {-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeOperators #-} {-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE TypeOperators #-}
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
-- | -- |
-- Module : Servant.JS -- Module : Servant.JS
@ -114,13 +114,13 @@ module Servant.JS
, AjaxReq , AjaxReq
) where ) where
import Data.Proxy import Data.Proxy
import Servant.API import Servant.API
import Servant.JS.Angular import Servant.JS.Angular
import Servant.JS.Axios import Servant.JS.Axios
import Servant.JS.Internal import Servant.JS.Internal
import Servant.JS.JQuery import Servant.JS.JQuery
import Servant.JS.Vanilla import Servant.JS.Vanilla
-- | Generate the data necessary to generate javascript code -- | Generate the data necessary to generate javascript code
-- for all the endpoints of an API, as ':<|>'-separated values -- for all the endpoints of an API, as ':<|>'-separated values
@ -160,6 +160,6 @@ instance (GenerateList start, GenerateList rest) => GenerateList (start :<|> res
generateList (start :<|> rest) = (generateList start) ++ (generateList rest) generateList (start :<|> rest) = (generateList start) ++ (generateList rest)
-- | Generate the necessary data for JS codegen as a list, each 'AjaxReq' -- | Generate the necessary data for JS codegen as a list, each 'AjaxReq'
-- describing one endpoint from your API type. -- describing one endpoint from your API type.
listFromAPI :: (HasJS api, GenerateList (JS api)) => Proxy api -> [AjaxReq] listFromAPI :: (HasJS api, GenerateList (JS api)) => Proxy api -> [AjaxReq]
listFromAPI p = generateList (javascript p) listFromAPI p = generateList (javascript p)

View File

@ -1,16 +1,16 @@
module Servant.JS.Angular where module Servant.JS.Angular where
import Servant.JS.Internal import Control.Lens
import Control.Lens import Data.List
import Data.List import Data.Monoid
import Data.Monoid import Servant.JS.Internal
-- | Options specific to the angular code generator -- | Options specific to the angular code generator
data AngularOptions = AngularOptions data AngularOptions = AngularOptions
{ serviceName :: String -- ^ When generating code with wrapInService, { serviceName :: String -- ^ When generating code with wrapInService,
-- name of the service to generate -- name of the service to generate
, prologue :: String -> String -> String -- ^ beginning of the service definition , prologue :: String -> String -> String -- ^ beginning of the service definition
, epilogue :: String -- ^ end of the service definition , epilogue :: String -- ^ end of the service definition
} }
-- | Default options for the Angular codegen. Used by 'wrapInService'. -- | Default options for the Angular codegen. Used by 'wrapInService'.
@ -31,7 +31,7 @@ angularService ngOpts = angularServiceWith ngOpts defCommonGeneratorOptions
-- | Instead of simply generating top level functions, generates a service instance -- | Instead of simply generating top level functions, generates a service instance
-- on which your controllers can depend to access your API -- on which your controllers can depend to access your API
angularServiceWith :: AngularOptions -> CommonGeneratorOptions -> JavaScriptGenerator angularServiceWith :: AngularOptions -> CommonGeneratorOptions -> JavaScriptGenerator
angularServiceWith ngOpts opts reqs = angularServiceWith ngOpts opts reqs =
prologue ngOpts svc mName prologue ngOpts svc mName
<> intercalate "," (map generator reqs) <> <> intercalate "," (map generator reqs) <>
epilogue ngOpts epilogue ngOpts
@ -54,7 +54,7 @@ angularWith ngopts opts = intercalate "\n\n" . map (generateAngularJSWith ngopts
-- | js codegen using $http service from Angular using default options -- | js codegen using $http service from Angular using default options
generateAngularJS :: AngularOptions -> AjaxReq -> String generateAngularJS :: AngularOptions -> AjaxReq -> String
generateAngularJS ngOpts = generateAngularJSWith ngOpts defCommonGeneratorOptions generateAngularJS ngOpts = generateAngularJSWith ngOpts defCommonGeneratorOptions
-- | js codegen using $http service from Angular -- | js codegen using $http service from Angular
generateAngularJSWith :: AngularOptions -> CommonGeneratorOptions -> AjaxReq -> String generateAngularJSWith :: AngularOptions -> CommonGeneratorOptions -> AjaxReq -> String
generateAngularJSWith ngOptions opts req = "\n" <> generateAngularJSWith ngOptions opts req = "\n" <>
@ -74,7 +74,7 @@ generateAngularJSWith ngOptions opts req = "\n" <>
++ map (view argName) queryparams ++ map (view argName) queryparams
++ body ++ body
++ map (toValidFunctionName . (<>) "header" . headerArgName) hs ++ map (toValidFunctionName . (<>) "header" . headerArgName) hs
-- If we want to generate Top Level Function, they must depend on -- If we want to generate Top Level Function, they must depend on
-- the $http service, if we generate a service, the functions will -- the $http service, if we generate a service, the functions will
-- inherit this dependency from the service -- inherit this dependency from the service
@ -118,13 +118,13 @@ generateAngularJSWith ngOptions opts req = "\n" <>
else (moduleName opts) <> "." else (moduleName opts) <> "."
where where
hasNoModule = null (moduleName opts) hasNoModule = null (moduleName opts)
hasService = not $ null (serviceName ngOptions) hasService = not $ null (serviceName ngOptions)
fsep = if hasService then ":" else " =" fsep = if hasService then ":" else " ="
fname = namespace <> (functionNameBuilder opts $ req ^. funcName) fname = namespace <> (functionNameBuilder opts $ req ^. funcName)
method = req ^. reqMethod method = req ^. reqMethod
url = if url' == "'" then "'/'" else url' url = if url' == "'" then "'/'" else url'
url' = "'" url' = "'"

View File

@ -1,10 +1,10 @@
module Servant.JS.Axios where module Servant.JS.Axios where
import Servant.JS.Internal import Control.Lens
import Control.Lens import Data.Char (toLower)
import Data.Char (toLower) import Data.List
import Data.List import Data.Monoid
import Data.Monoid import Servant.JS.Internal
-- | Axios 'configuration' type -- | Axios 'configuration' type
-- Let you customize the generation using Axios capabilities -- Let you customize the generation using Axios capabilities
@ -13,9 +13,9 @@ data AxiosOptions = AxiosOptions
-- should be made using credentials -- should be made using credentials
withCredentials :: !Bool withCredentials :: !Bool
-- | the name of the cookie to use as a value for xsrf token -- | the name of the cookie to use as a value for xsrf token
, xsrfCookieName :: !(Maybe String) , xsrfCookieName :: !(Maybe String)
-- | the name of the header to use as a value for xsrf token -- | the name of the header to use as a value for xsrf token
, xsrfHeaderName :: !(Maybe String) , xsrfHeaderName :: !(Maybe String)
} }
-- | Default instance of the AxiosOptions -- | Default instance of the AxiosOptions
@ -40,7 +40,7 @@ axiosWith aopts opts = intercalate "\n\n" . map (generateAxiosJSWith aopts opts)
-- | js codegen using axios library using default options -- | js codegen using axios library using default options
generateAxiosJS :: AxiosOptions -> AjaxReq -> String generateAxiosJS :: AxiosOptions -> AjaxReq -> String
generateAxiosJS aopts = generateAxiosJSWith aopts defCommonGeneratorOptions generateAxiosJS aopts = generateAxiosJSWith aopts defCommonGeneratorOptions
-- | js codegen using axios library -- | js codegen using axios library
generateAxiosJSWith :: AxiosOptions -> CommonGeneratorOptions -> AjaxReq -> String generateAxiosJSWith :: AxiosOptions -> CommonGeneratorOptions -> AjaxReq -> String
generateAxiosJSWith aopts opts req = "\n" <> generateAxiosJSWith aopts opts req = "\n" <>
@ -61,7 +61,7 @@ generateAxiosJSWith aopts opts req = "\n" <>
++ map (view argName) queryparams ++ map (view argName) queryparams
++ body ++ body
++ map (toValidFunctionName . (<>) "header" . headerArgName) hs ++ map (toValidFunctionName . (<>) "header" . headerArgName) hs
captures = map captureArg captures = map captureArg
. filter isCapture . filter isCapture
$ req ^. reqUrl.path $ req ^. reqUrl.path
@ -85,7 +85,7 @@ generateAxiosJSWith aopts opts req = "\n" <>
then " , withCredentials: true\n" then " , withCredentials: true\n"
else "" else ""
xsrfCookie = xsrfCookie =
case xsrfCookieName aopts of case xsrfCookieName aopts of
Just name -> " , xsrfCookieName: '" <> name <> "'\n" Just name -> " , xsrfCookieName: '" <> name <> "'\n"
Nothing -> "" Nothing -> ""
@ -111,9 +111,9 @@ generateAxiosJSWith aopts opts req = "\n" <>
else (moduleName opts) <> "." else (moduleName opts) <> "."
where where
hasNoModule = null (moduleName opts) hasNoModule = null (moduleName opts)
fname = namespace <> (functionNameBuilder opts $ req ^. funcName) fname = namespace <> (functionNameBuilder opts $ req ^. funcName)
method = map toLower $ req ^. reqMethod method = map toLower $ req ^. reqMethod
url = if url' == "'" then "'/'" else url' url = if url' == "'" then "'/'" else url'
url' = "'" url' = "'"

View File

@ -1,9 +1,9 @@
module Servant.JS.JQuery where module Servant.JS.JQuery where
import Servant.JS.Internal import Control.Lens
import Control.Lens import Data.List
import Data.List import Data.Monoid
import Data.Monoid import Servant.JS.Internal
-- | Generate javascript functions that use the /jQuery/ library -- | Generate javascript functions that use the /jQuery/ library
-- to make the AJAX calls. Uses 'defCommonGeneratorOptions' -- to make the AJAX calls. Uses 'defCommonGeneratorOptions'

View File

@ -1,9 +1,9 @@
module Servant.JS.Vanilla where module Servant.JS.Vanilla where
import Servant.JS.Internal import Control.Lens
import Control.Lens import Data.List
import Data.List import Data.Monoid
import Data.Monoid import Servant.JS.Internal
-- | Generate vanilla javascript functions to make AJAX requests -- | Generate vanilla javascript functions to make AJAX requests
-- to your API, using /XMLHttpRequest/. Uses 'defCommonGeneratorOptions' -- to your API, using /XMLHttpRequest/. Uses 'defCommonGeneratorOptions'

View File

@ -7,18 +7,18 @@
{-# OPTIONS_GHC -fno-warn-orphans #-} {-# OPTIONS_GHC -fno-warn-orphans #-}
module Servant.JSSpec where module Servant.JSSpec where
import Data.Either (isRight) import Data.Either (isRight)
import Data.Proxy import Data.Proxy
import Language.ECMAScript3.Parser (parseFromString) import Language.ECMAScript3.Parser (parseFromString)
import Test.Hspec import Test.Hspec
import Servant.API import Servant.API
import Servant.JS import Servant.JS
import qualified Servant.JS.Vanilla as JS import qualified Servant.JS.Angular as NG
import qualified Servant.JS.JQuery as JQ import qualified Servant.JS.Axios as AX
import qualified Servant.JS.Angular as NG import qualified Servant.JS.JQuery as JQ
import qualified Servant.JS.Axios as AX import qualified Servant.JS.Vanilla as JS
import Servant.JSSpec.CustomHeaders import Servant.JSSpec.CustomHeaders
type TestAPI = "simple" :> ReqBody '[JSON,FormUrlEncoded] String :> Post '[JSON] Bool type TestAPI = "simple" :> ReqBody '[JSON,FormUrlEncoded] String :> Post '[JSON] Bool
:<|> "has.extension" :> Get '[FormUrlEncoded,JSON] Bool :<|> "has.extension" :> Get '[FormUrlEncoded,JSON] Bool

View File

@ -8,13 +8,13 @@
module Servant.JSSpec.CustomHeaders where module Servant.JSSpec.CustomHeaders where
import Control.Lens import Control.Lens
import Data.Monoid import Data.Monoid
import Data.Proxy import Data.Proxy
import GHC.TypeLits import GHC.TypeLits
import Servant.API import Servant.API
import Servant.JS import Servant.JS
import Servant.JS.Internal import Servant.JS.Internal
-- | This is a hypothetical combinator that fetches an Authorization header. -- | This is a hypothetical combinator that fetches an Authorization header.
-- The symbol in the header denotes what kind of authentication we are -- The symbol in the header denotes what kind of authentication we are

View File

@ -1,2 +1,2 @@
import Distribution.Simple import Distribution.Simple
main = defaultMain main = defaultMain

View File

@ -1,2 +1,2 @@
import Distribution.Simple import Distribution.Simple
main = defaultMain main = defaultMain

View File

@ -1,13 +1,13 @@
{-# LANGUAGE DataKinds #-} {-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeOperators #-} {-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-}
import Data.Aeson {-# LANGUAGE TypeOperators #-}
import GHC.Generics import Data.Aeson
import Network.Wai.Handler.Warp import GHC.Generics
import Servant import Network.Wai.Handler.Warp
import Servant.Mock import Servant
import Test.QuickCheck.Arbitrary import Servant.Mock
import Test.QuickCheck.Arbitrary
newtype User = User { username :: String } newtype User = User { username :: String }
deriving (Eq, Show, Arbitrary, Generic) deriving (Eq, Show, Arbitrary, Generic)

View File

@ -1,2 +1,2 @@
import Distribution.Simple import Distribution.Simple
main = defaultMain main = defaultMain

View File

@ -1,19 +1,19 @@
{-# LANGUAGE DataKinds #-} {-# LANGUAGE DataKinds #-}
{-# LANGUAGE PolyKinds #-} {-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
import Data.Aeson import Data.Aeson
import Data.Monoid import Data.Monoid
import Data.Proxy import Data.Proxy
import Data.Text import Data.Text
import GHC.Generics import GHC.Generics
import Network.Wai import Network.Wai
import Network.Wai.Handler.Warp import Network.Wai.Handler.Warp
import Servant import Servant
-- * Example -- * Example

View File

@ -14,9 +14,9 @@ module Servant (
Proxy(..), Proxy(..),
) where ) where
import Data.Proxy import Data.Proxy
import Servant.API import Servant.API
import Servant.Common.Text import Servant.Common.Text
import Servant.Server import Servant.Server
import Servant.Utils.Links import Servant.Utils.Links
import Servant.Utils.StaticFiles import Servant.Utils.StaticFiles

View File

@ -77,8 +77,8 @@ module Servant.Server
) where ) where
import Data.Proxy (Proxy) import Data.Proxy (Proxy)
import Network.Wai (Application) import Network.Wai (Application)
import Servant.Server.Internal import Servant.Server.Internal
import Servant.Server.Internal.Enter import Servant.Server.Internal.Enter

View File

@ -27,7 +27,7 @@ import Control.Monad.Trans.Either (EitherT)
import qualified Data.ByteString as B import qualified Data.ByteString as B
import qualified Data.ByteString.Lazy as BL import qualified Data.ByteString.Lazy as BL
import qualified Data.Map as M import qualified Data.Map as M
import Data.Maybe (catMaybes, fromMaybe) import Data.Maybe (mapMaybe, fromMaybe)
import Data.String (fromString) import Data.String (fromString)
import Data.String.Conversions (cs, (<>), ConvertibleStrings) import Data.String.Conversions (cs, (<>), ConvertibleStrings)
import Data.Text (Text) import Data.Text (Text)

View File

@ -1,10 +1,10 @@
{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE OverloadedStrings #-}
module Servant.Server.Internal.PathInfo where module Servant.Server.Internal.PathInfo where
import Data.List (unfoldr) import Data.List (unfoldr)
import Data.Text (Text) import Data.Text (Text)
import qualified Data.Text as T import qualified Data.Text as T
import Network.Wai (Request, pathInfo) import Network.Wai (Request, pathInfo)
-- | Like `null . pathInfo`, but works with redundant trailing slashes. -- | Like `null . pathInfo`, but works with redundant trailing slashes.
pathIsEmpty :: Request -> Bool pathIsEmpty :: Request -> Bool

View File

@ -1,10 +1,10 @@
module Servant.Server.Internal.Router where module Servant.Server.Internal.Router where
import Data.Map (Map) import Data.Map (Map)
import qualified Data.Map as M import qualified Data.Map as M
import Data.Monoid ((<>)) import Data.Monoid ((<>))
import Data.Text (Text) import Data.Text (Text)
import Network.Wai (Request, pathInfo) import Network.Wai (Request, pathInfo)
import Servant.Server.Internal.PathInfo import Servant.Server.Internal.PathInfo
import Servant.Server.Internal.RoutingApplication import Servant.Server.Internal.RoutingApplication

View File

@ -5,23 +5,24 @@
module Servant.Server.Internal.RoutingApplication where module Servant.Server.Internal.RoutingApplication where
#if !MIN_VERSION_base(4,8,0) #if !MIN_VERSION_base(4,8,0)
import Control.Applicative (Applicative, (<$>)) import Control.Applicative (Applicative, (<$>))
import Data.Monoid (Monoid, mappend, mempty) import Data.Monoid (Monoid, mappend, mempty)
#endif #endif
import Control.Monad.Trans.Either (EitherT, runEitherT) import Control.Monad.Trans.Either (EitherT, runEitherT)
import qualified Data.ByteString as B import qualified Data.ByteString as B
import qualified Data.ByteString.Lazy as BL import qualified Data.ByteString.Lazy as BL
import Data.IORef (newIORef, readIORef, writeIORef) import Data.IORef (newIORef, readIORef,
import Data.Maybe (fromMaybe) writeIORef)
import Data.Monoid ((<>)) import Data.Maybe (fromMaybe)
import Data.String (fromString) import Data.Monoid ((<>))
import Network.HTTP.Types hiding (Header, ResponseHeaders) import Data.String (fromString)
import Network.Wai (Application, Request, Response, import Network.HTTP.Types hiding (Header,
ResponseReceived, ResponseHeaders)
requestBody, import Network.Wai (Application, Request,
responseLBS, Response, ResponseReceived,
strictRequestBody) requestBody, responseLBS,
import Servant.API ((:<|>) (..)) strictRequestBody)
import Servant.API ((:<|>) (..))
import Servant.Server.Internal.ServantErr import Servant.Server.Internal.ServantErr
type RoutingApplication = type RoutingApplication =

View File

@ -2,10 +2,10 @@
{-# LANGUAGE RecordWildCards #-} {-# LANGUAGE RecordWildCards #-}
module Servant.Server.Internal.ServantErr where module Servant.Server.Internal.ServantErr where
import qualified Data.ByteString.Char8 as BS import qualified Data.ByteString.Char8 as BS
import qualified Data.ByteString.Lazy as LBS import qualified Data.ByteString.Lazy as LBS
import qualified Network.HTTP.Types as HTTP import qualified Network.HTTP.Types as HTTP
import Network.Wai (responseLBS, Response) import Network.Wai (Response, responseLBS)
data ServantErr = ServantErr { errHTTPCode :: Int data ServantErr = ServantErr { errHTTPCode :: Int
, errReasonPhrase :: String , errReasonPhrase :: String

View File

@ -7,12 +7,13 @@ module Servant.Utils.StaticFiles (
serveDirectory, serveDirectory,
) where ) where
import System.FilePath (addTrailingPathSeparator) import Network.Wai.Application.Static (defaultFileServerSettings,
import Network.Wai.Application.Static (staticApp, defaultFileServerSettings) staticApp)
import Servant.API.Raw (Raw) import Servant.API.Raw (Raw)
import Servant.Server (Server) import Servant.Server (Server)
import System.FilePath (addTrailingPathSeparator)
#if !MIN_VERSION_wai_app_static(3,1,0) #if !MIN_VERSION_wai_app_static(3,1,0)
import Filesystem.Path.CurrentOS (decodeString) import Filesystem.Path.CurrentOS (decodeString)
#endif #endif
-- | Serve anything under the specified directory as a 'Raw' endpoint. -- | Serve anything under the specified directory as a 'Raw' endpoint.

View File

@ -1,6 +1,6 @@
module Main where module Main where
import Data.List (isPrefixOf) import Data.List (isPrefixOf)
import System.Directory import System.Directory
import System.FilePath import System.FilePath
import System.FilePath.Find import System.FilePath.Find

View File

@ -3,16 +3,16 @@
{-# LANGUAGE TypeOperators #-} {-# LANGUAGE TypeOperators #-}
module Servant.Server.Internal.EnterSpec where module Servant.Server.Internal.EnterSpec where
import qualified Control.Category as C import qualified Control.Category as C
import Control.Monad.Reader import Control.Monad.Reader
import Control.Monad.Trans.Either import Control.Monad.Trans.Either
import Data.Proxy import Data.Proxy
import Servant.API import Servant.API
import Servant.Server import Servant.Server
import Test.Hspec (Spec, describe, it) import Test.Hspec (Spec, describe, it)
import Test.Hspec.Wai (get, matchStatus, post, import Test.Hspec.Wai (get, matchStatus, post,
shouldRespondWith, with) shouldRespondWith, with)
spec :: Spec spec :: Spec
spec = describe "module Servant.Server.Enter" $ do spec = describe "module Servant.Server.Enter" $ do

View File

@ -1,27 +1,29 @@
{-# LANGUAGE DataKinds #-} {-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeOperators #-} {-# LANGUAGE TypeOperators #-}
{-# OPTIONS_GHC -fno-warn-orphans #-} {-# OPTIONS_GHC -fno-warn-orphans #-}
module Servant.Utils.StaticFilesSpec where module Servant.Utils.StaticFilesSpec where
import Control.Exception (bracket) import Control.Exception (bracket)
import Data.Proxy (Proxy(Proxy)) import Data.Proxy (Proxy (Proxy))
import Network.Wai (Application) import Network.Wai (Application)
import System.Directory (getCurrentDirectory, setCurrentDirectory, createDirectory) import System.Directory (createDirectory,
import System.IO.Temp (withSystemTempDirectory) getCurrentDirectory,
import Test.Hspec (Spec, describe, it, around_) setCurrentDirectory)
import Test.Hspec.Wai (with, get, shouldRespondWith) import System.IO.Temp (withSystemTempDirectory)
import Test.Hspec (Spec, around_, describe, it)
import Test.Hspec.Wai (get, shouldRespondWith, with)
import Servant.API (JSON) import Servant.API (JSON)
import Servant.API.Alternative ((:<|>)((:<|>))) import Servant.API.Alternative ((:<|>) ((:<|>)))
import Servant.API.Capture (Capture) import Servant.API.Capture (Capture)
import Servant.API.Get (Get) import Servant.API.Get (Get)
import Servant.API.Raw (Raw) import Servant.API.Raw (Raw)
import Servant.API.Sub ((:>)) import Servant.API.Sub ((:>))
import Servant.Server (Server, serve) import Servant.Server (Server, serve)
import Servant.ServerSpec (Person(Person)) import Servant.ServerSpec (Person (Person))
import Servant.Utils.StaticFiles (serveDirectory) import Servant.Utils.StaticFiles (serveDirectory)
type Api = type Api =
"dummy_api" :> Capture "person_name" String :> Get '[JSON] Person "dummy_api" :> Capture "person_name" String :> Get '[JSON] Person

View File

@ -1,2 +1,2 @@
import Distribution.Simple import Distribution.Simple
main = defaultMain main = defaultMain

View File

@ -69,8 +69,8 @@ import Servant.API.ContentTypes (Accept (..), FormUrlEncoded,
import Servant.API.Delete (Delete) import Servant.API.Delete (Delete)
import Servant.API.Get (Get) import Servant.API.Get (Get)
import Servant.API.Header (Header (..)) import Servant.API.Header (Header (..))
import Servant.API.HttpVersion (HttpVersion(..)) import Servant.API.HttpVersion (HttpVersion (..))
import Servant.API.IsSecure (IsSecure(..)) import Servant.API.IsSecure (IsSecure (..))
import Servant.API.MatrixParam (MatrixFlag, MatrixParam, import Servant.API.MatrixParam (MatrixFlag, MatrixParam,
MatrixParams) MatrixParams)
import Servant.API.Patch (Patch) import Servant.API.Patch (Patch)

View File

@ -4,7 +4,7 @@
{-# OPTIONS_HADDOCK not-home #-} {-# OPTIONS_HADDOCK not-home #-}
module Servant.API.Delete (Delete) where module Servant.API.Delete (Delete) where
import Data.Typeable ( Typeable ) import Data.Typeable (Typeable)
-- | Combinator for DELETE requests. -- | Combinator for DELETE requests.
-- --

View File

@ -3,7 +3,7 @@ module Servant.API.HttpVersion
HttpVersion(..) HttpVersion(..)
) where ) where
import Network.HTTP.Types (HttpVersion(..)) import Network.HTTP.Types (HttpVersion (..))
-- $httpversion -- $httpversion
-- --

View File

@ -4,7 +4,7 @@ module Servant.API.IsSecure
IsSecure(..) IsSecure(..)
) where ) where
import Data.Typeable import Data.Typeable
-- | Was this request made over an SSL connection? -- | Was this request made over an SSL connection?
-- --

View File

@ -4,7 +4,7 @@
{-# OPTIONS_HADDOCK not-home #-} {-# OPTIONS_HADDOCK not-home #-}
module Servant.API.Put (Put) where module Servant.API.Put (Put) where
import Data.Typeable ( Typeable ) import Data.Typeable (Typeable)
-- | Endpoint for PUT requests, usually used to update a ressource. -- | Endpoint for PUT requests, usually used to update a ressource.
-- The type @a@ is the type of the response body that's returned. -- The type @a@ is the type of the response body that's returned.

View File

@ -2,7 +2,7 @@
{-# OPTIONS_HADDOCK not-home #-} {-# OPTIONS_HADDOCK not-home #-}
module Servant.API.Raw where module Servant.API.Raw where
import Data.Typeable (Typeable) import Data.Typeable (Typeable)
-- | Endpoint for plugging in your own Wai 'Application's. -- | Endpoint for plugging in your own Wai 'Application's.
-- --
-- The given 'Application' will get the request as received by the server, potentially with -- The given 'Application' will get the request as received by the server, potentially with

View File

@ -4,7 +4,7 @@ module Servant.API.RemoteHost
RemoteHost RemoteHost
) where ) where
import Data.Typeable import Data.Typeable
-- | Provides access to the host or IP address -- | Provides access to the host or IP address
-- from which the HTTP request was sent. -- from which the HTTP request was sent.

View File

@ -3,7 +3,7 @@ module Servant.API.Vault
Vault Vault
) where ) where
import Data.Vault.Lazy (Vault) import Data.Vault.Lazy (Vault)
-- $vault -- $vault
-- --

View File

@ -1,6 +1,6 @@
module Main where module Main where
import Data.List (isPrefixOf) import Data.List (isPrefixOf)
import System.Directory import System.Directory
import System.FilePath import System.FilePath
import System.FilePath.Find import System.FilePath.Find

View File

@ -12,22 +12,22 @@ import Data.Monoid
#endif #endif
import Control.Arrow import Control.Arrow
import Data.Aeson import Data.Aeson
import Data.ByteString.Char8 (ByteString, append, pack)
import qualified Data.ByteString.Lazy as BSL
import Data.Either import Data.Either
import Data.Function (on) import Data.Function (on)
import Data.List (maximumBy)
import Data.Maybe (fromJust, isJust, isNothing)
import Data.Proxy import Data.Proxy
import Data.ByteString.Char8 (ByteString, append, pack) import Data.String (IsString (..))
import qualified Data.ByteString.Lazy as BSL import Data.String.Conversions (cs)
import Data.List (maximumBy) import qualified Data.Text as TextS
import Data.Maybe (fromJust, isJust, isNothing) import qualified Data.Text.Lazy as TextL
import Data.String (IsString (..))
import Data.String.Conversions (cs)
import qualified Data.Text as TextS
import qualified Data.Text.Lazy as TextL
import GHC.Generics import GHC.Generics
import Network.URL (exportParams, importParams) import Network.URL (exportParams, importParams)
import Test.Hspec import Test.Hspec
import Test.QuickCheck import Test.QuickCheck
import Test.QuickCheck.Instances () import Test.QuickCheck.Instances ()
import Servant.API.ContentTypes import Servant.API.ContentTypes