Cabal revisions of servant-jquery-0.2
Hackage metadata revisions edit the .cabal file after upload; each diff below is one revision.
revision 1
-name: servant-jquery-version: 0.2-synopsis: Automatically derive jquery-based javascript functions to query servant webservices-description:- Automatically derive jquery-based javascript functions to query servant webservices.- .- Example below that serves the generated javascript to a webpage that lets you- trigger webservice calls.- .- > {-# LANGUAGE DataKinds #-}- > {-# LANGUAGE TypeOperators #-}- > {-# LANGUAGE DeriveGeneric #-}- > {-# LANGUAGE GeneralizedNewtypeDeriving #-}- >- > import Control.Concurrent.STM- > import Control.Monad.IO.Class- > import Data.Aeson- > import Data.Proxy- > import GHC.Generics- > import Network.Wai.Handler.Warp (run)- > import Servant- > import Servant.JQuery- > import System.FilePath- >- > -- * A simple Counter data type- > newtype Counter = Counter { value :: Int }- > deriving (Generic, Show, Num)- >- > instance ToJSON Counter- >- > -- * Shared counter operations- >- > -- Creating a counter that starts from 0- > newCounter :: IO (TVar Counter)- > newCounter = newTVarIO 0- >- > -- Increasing the counter by 1- > counterPlusOne :: MonadIO m => TVar Counter -> m Counter- > counterPlusOne counter = liftIO . atomically $ do- > oldValue <- readTVar counter- > let newValue = oldValue + 1- > writeTVar counter newValue- > return newValue- >- > currentValue :: MonadIO m => TVar Counter -> m Counter- > currentValue counter = liftIO $ readTVarIO counter- >- > -- * Our API type- > type TestApi = "counter" :> Post Counter -- endpoint for increasing the counter- > :<|> "counter" :> Get Counter -- endpoint to get the current value- > :<|> Raw -- used for serving static files - >- > testApi :: Proxy TestApi- > testApi = Proxy- >- > -- * Server-side handler- >- > -- where our static files reside- > www :: FilePath- > www = "examples/www"- >- > -- defining handlers- > server :: TVar Counter -> Server TestApi- > server counter = counterPlusOne counter -- (+1) on the TVar- > :<|> currentValue counter -- read the TVar- > :<|> serveDirectory www -- serve static files- >- > runServer :: TVar Counter -- ^ shared variable for the counter- > -> Int -- ^ port the server should listen on- > -> IO ()- > runServer var port = run port (serve testApi $ server var)- >- > -- * Generating the JQuery code- >- > incCounterJS :<|> currentValueJS :<|> _ = jquery testApi- >- > writeJS :: FilePath -> [AjaxReq] -> IO ()- > writeJS fp functions = writeFile fp $- > concatMap generateJS functions- >- > main :: IO ()- > main = do- > -- write the JS code to www/api.js at startup- > writeJS (www </> "api.js")- > [ incCounterJS, currentValueJS ]- >- > -- setup a shared counter- > cnt <- newCounter- >- > -- listen to requests on port 8080- > runServer cnt 8080-license: BSD3-license-file: LICENSE-author: Alp Mestanogullari-maintainer: alpmestan@gmail.com-copyright: 2014 Alp Mestanogullari-category: Web-build-type: Simple-cabal-version: >=1.10-homepage: http://haskell-servant.github.io/-Bug-reports: http://github.com/haskell-servant/servant-jquery/issues-source-repository head- type: git- location: http://github.com/haskell-servant/servant-jquery.git--library- exposed-modules: Servant.JQuery- other-modules: Servant.JQuery.Internal- build-depends: base >=4.5 && <5, servant >= 0.2, lens >= 4- hs-source-dirs: src- default-language: Haskell2010- ghc-options: -Wall--executable counter- main-is: counter.hs- ghc-options: -O2 -Wall- hs-source-dirs: examples- build-depends:- aeson- , base- , filepath- , servant >= 0.2- , servant-jquery >= 0.2- , stm- , transformers- , warp- default-language: Haskell2010+name: servant-jquery +version: 0.2 +x-revision: 1 +synopsis: Automatically derive jquery-based javascript functions to query servant webservices +description: + Automatically derive jquery-based javascript functions to query servant webservices. + . + Example below that serves the generated javascript to a webpage that lets you + trigger webservice calls. + . + > import Control.Concurrent.STM + > import Control.Monad.IO.Class + > import Data.Aeson + > import Data.Proxy + > import GHC.Generics + > import Network.Wai.Handler.Warp (run) + > import Servant + > import Servant.JQuery + > import System.FilePath + > + > -- * A simple Counter data type + > newtype Counter = Counter { value :: Int } + > deriving (Generic, Show, Num) + > + > instance ToJSON Counter + > + > -- * Shared counter operations + > + > -- Creating a counter that starts from 0 + > newCounter :: IO (TVar Counter) + > newCounter = newTVarIO 0 + > + > -- Increasing the counter by 1 + > counterPlusOne :: MonadIO m => TVar Counter -> m Counter + > counterPlusOne counter = liftIO . atomically $ do + > oldValue <- readTVar counter + > let newValue = oldValue + 1 + > writeTVar counter newValue + > return newValue + > + > currentValue :: MonadIO m => TVar Counter -> m Counter + > currentValue counter = liftIO $ readTVarIO counter + > + > -- * Our API type + > type TestApi = "counter" :> Post Counter -- endpoint for increasing the counter + > :<|> "counter" :> Get Counter -- endpoint to get the current value + > :<|> Raw -- used for serving static files + > + > testApi :: Proxy TestApi + > testApi = Proxy + > + > -- * Server-side handler + > + > -- where our static files reside + > www :: FilePath + > www = "examples/www" + > + > -- defining handlers + > server :: TVar Counter -> Server TestApi + > server counter = counterPlusOne counter -- (+1) on the TVar + > :<|> currentValue counter -- read the TVar + > :<|> serveDirectory www -- serve static files + > + > runServer :: TVar Counter -- ^ shared variable for the counter + > -> Int -- ^ port the server should listen on + > -> IO () + > runServer var port = run port (serve testApi $ server var) + > + > -- * Generating the JQuery code + > + > incCounterJS :<|> currentValueJS :<|> _ = jquery testApi + > + > writeJS :: FilePath -> [AjaxReq] -> IO () + > writeJS fp functions = writeFile fp $ + > concatMap generateJS functions + > + > main :: IO () + > main = do + > -- write the JS code to www/api.js at startup + > writeJS (www </> "api.js") + > [ incCounterJS, currentValueJS ] + > + > -- setup a shared counter + > cnt <- newCounter + > + > -- listen to requests on port 8080 + > runServer cnt 8080 +license: BSD3 +license-file: LICENSE +author: Alp Mestanogullari +maintainer: alpmestan@gmail.com +copyright: 2014 Alp Mestanogullari +category: Web +build-type: Simple +cabal-version: >=1.10 +homepage: http://haskell-servant.github.io/ +Bug-reports: http://github.com/haskell-servant/servant-jquery/issues +source-repository head + type: git + location: http://github.com/haskell-servant/servant-jquery.git + +library + exposed-modules: Servant.JQuery + other-modules: Servant.JQuery.Internal + build-depends: base >=4.5 && <5, servant >= 0.2, lens >= 4 + hs-source-dirs: src + default-language: Haskell2010 + ghc-options: -Wall + +executable counter + main-is: counter.hs + ghc-options: -O2 -Wall + hs-source-dirs: examples + build-depends: + aeson + , base + , filepath + , servant >= 0.2 + , servant-jquery >= 0.2 + , stm + , transformers + , warp + default-language: Haskell2010
revision 2
name: servant-jquery version: 0.2 -x-revision: 1 +x-revision: 2 synopsis: Automatically derive jquery-based javascript functions to query servant webservices description: Automatically derive jquery-based javascript functions to query servant webservices. . - Example below that serves the generated javascript to a webpage that lets you + Example <https://github.com/haskell-servant/servant-jquery/blob/master/examples/counter.hs here> that serves the generated javascript to a webpage that lets you trigger webservice calls. - . - > import Control.Concurrent.STM - > import Control.Monad.IO.Class - > import Data.Aeson - > import Data.Proxy - > import GHC.Generics - > import Network.Wai.Handler.Warp (run) - > import Servant - > import Servant.JQuery - > import System.FilePath - > - > -- * A simple Counter data type - > newtype Counter = Counter { value :: Int } - > deriving (Generic, Show, Num) - > - > instance ToJSON Counter - > - > -- * Shared counter operations - > - > -- Creating a counter that starts from 0 - > newCounter :: IO (TVar Counter) - > newCounter = newTVarIO 0 - > - > -- Increasing the counter by 1 - > counterPlusOne :: MonadIO m => TVar Counter -> m Counter - > counterPlusOne counter = liftIO . atomically $ do - > oldValue <- readTVar counter - > let newValue = oldValue + 1 - > writeTVar counter newValue - > return newValue - > - > currentValue :: MonadIO m => TVar Counter -> m Counter - > currentValue counter = liftIO $ readTVarIO counter - > - > -- * Our API type - > type TestApi = "counter" :> Post Counter -- endpoint for increasing the counter - > :<|> "counter" :> Get Counter -- endpoint to get the current value - > :<|> Raw -- used for serving static files - > - > testApi :: Proxy TestApi - > testApi = Proxy - > - > -- * Server-side handler - > - > -- where our static files reside - > www :: FilePath - > www = "examples/www" - > - > -- defining handlers - > server :: TVar Counter -> Server TestApi - > server counter = counterPlusOne counter -- (+1) on the TVar - > :<|> currentValue counter -- read the TVar - > :<|> serveDirectory www -- serve static files - > - > runServer :: TVar Counter -- ^ shared variable for the counter - > -> Int -- ^ port the server should listen on - > -> IO () - > runServer var port = run port (serve testApi $ server var) - > - > -- * Generating the JQuery code - > - > incCounterJS :<|> currentValueJS :<|> _ = jquery testApi - > - > writeJS :: FilePath -> [AjaxReq] -> IO () - > writeJS fp functions = writeFile fp $ - > concatMap generateJS functions - > - > main :: IO () - > main = do - > -- write the JS code to www/api.js at startup - > writeJS (www </> "api.js") - > [ incCounterJS, currentValueJS ] - > - > -- setup a shared counter - > cnt <- newCounter - > - > -- listen to requests on port 8080 - > runServer cnt 8080 license: BSD3 license-file: LICENSE author: Alp Mestanogullari