-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Simple web framework inspired by scotty.
--
-- Simple web framework inspired by scotty.
--
--
-- {-# LANGUAGE QuasiQuotes #-}
-- {-# LANGUAGE OverloadedStrings #-}
--
-- import Web.Apiary
-- import Network.Wai.Handler.Warp
-- import qualified Data.ByteString.Lazy.Char8 as L
--
-- main :: IO ()
-- main = run 3000 . runApiary def $ do
-- [capture|/:Int|] . ("name" =: pLazyByteString) . stdMethod GET . action $ \age name -> do
-- guard (age >= 18)
-- contentType "text/html"
-- lbs . L.concat $ ["<h1>Hello, ", name, "!</h1>\n"]
--
--
--
-- $ curl localhost:3000
-- 404 Page Notfound.
-- $ curl 'localhost:3000/20?name=arice'
-- <h1>Hello, arice!</h1>
-- $ curl 'localhost:3000/15?name=bob'
-- 404 Page Notfound.
-- $ curl -XPOST 'localhost:3000/20?name=arice'
-- 404 Page Notfound.
--
--
--
-- - Nestable route handling(Apiary Monad; capture, stdMethod and
-- more.).
-- - type safe route filter.
--
--
-- more examples:
-- https://github.com/philopon/apiary/blob/master/examples/
@package apiary
@version 0.9.0.0
module Data.Apiary.SList
data SList (as :: [*])
SNil :: SList '[]
(:::) :: a -> SList xs -> SList (a : xs)
apply :: Fn xs r -> SList xs -> r
sSnoc :: SList as -> a -> SList (Snoc as a)
type Reverse (a :: [*]) = Rev a '[]
sReverse :: SList as -> SList (Reverse as)
instance (All Show as) => Show (SList as)
module Control.Monad.Apiary.Filter.Internal.Strategy
class Strategy (w :: * -> *) where type family SNext w (as :: [*]) a :: [*]
readStrategy :: Strategy w => (v -> Maybe a) -> ((k, v) -> Bool) -> Proxy (w a) -> [(k, v)] -> SList as -> Maybe (SList (SNext w as a))
getQuery :: (v -> Maybe a) -> Proxy (w a) -> ((k, v) -> Bool) -> [(k, v)] -> [Maybe a]
-- | get first matched key( [1,) params to Type.). since 0.5.0.0.
data Option a
-- | get first matched key ( [0,) params to Maybe Type.) since 0.5.0.0.
data First a
-- | get key ( [1] param to Type.) since 0.5.0.0.
data One a
-- | get parameters ( [0,) params to [Type] ) since 0.5.0.0.
data Many a
-- | get parameters ( [1,) params to [Type] ) since 0.5.0.0.
data Some a
-- | get parameters with upper limit ( [1,n] to [Type]) since 0.6.0.0.
data LimitSome u a
reflectLimit :: Reifies n Int => Proxy (LimitSome n a) -> Int
-- | type check ( [0,) params to No argument ) since 0.5.0.0.
data Check a
-- | construct Option proxy. since 0.5.1.0.
pOption :: Proxy a -> Proxy (Option a)
-- | construct First proxy. since 0.5.1.0.
pFirst :: Proxy a -> Proxy (First a)
-- | construct One proxy. since 0.5.1.0.
pOne :: Proxy a -> Proxy (One a)
-- | construct Many proxy. since 0.5.1.0.
pMany :: Proxy a -> Proxy (Many a)
-- | construct Some proxy. since 0.5.1.0.
pSome :: Proxy a -> Proxy (Some a)
-- | construct Check proxy. since 0.5.1.0.
pCheck :: Proxy a -> Proxy (Check a)
instance Strategy Check
instance Reifies * u Int => Strategy (LimitSome u)
instance Strategy Some
instance Strategy Many
instance Strategy One
instance Strategy First
instance Strategy Option
-- | reexporting Network.Wai to reduce dependencies from apiary-* packages.
module Web.Apiary.Wai
module Data.Apiary.Param
jsToBool :: (IsString a, Eq a) => a -> Bool
class Path a
readPath :: Path a => Text -> Maybe a
class Query a
readQuery :: Query a => Maybe ByteString -> Maybe a
pBool :: Proxy Bool
pInt :: Proxy Int
pInt8 :: Proxy Int8
pInt16 :: Proxy Int16
pInt32 :: Proxy Int32
pInt64 :: Proxy Int64
pInteger :: Proxy Integer
pWord :: Proxy Word
pWord8 :: Proxy Word8
pWord16 :: Proxy Word16
pWord32 :: Proxy Word32
pWord64 :: Proxy Word64
pDouble :: Proxy Double
pFloat :: Proxy Float
pText :: Proxy Text
pLazyText :: Proxy Text
pByteString :: Proxy ByteString
pLazyByteString :: Proxy ByteString
pString :: Proxy String
pVoid :: Proxy ()
pMaybe :: Proxy a -> Proxy (Maybe a)
pFile :: Proxy (File ByteString)
class ReqParam a
reqParams :: ReqParam a => Proxy a -> Request -> [Param] -> [File ByteString] -> [(ByteString, Maybe a)]
instance [overlap ok] Query a => ReqParam a
instance [overlap ok] ReqParam (FileInfo ByteString)
instance [overlap ok] Query ()
instance [overlap ok] Query a => Query (Maybe a)
instance [overlap ok] Query String
instance [overlap ok] Query ByteString
instance [overlap ok] Query ByteString
instance [overlap ok] Query Text
instance [overlap ok] Query Text
instance [overlap ok] Query Float
instance [overlap ok] Query Double
instance [overlap ok] Query Word64
instance [overlap ok] Query Word32
instance [overlap ok] Query Word16
instance [overlap ok] Query Word8
instance [overlap ok] Query Word
instance [overlap ok] Query Integer
instance [overlap ok] Query Int64
instance [overlap ok] Query Int32
instance [overlap ok] Query Int16
instance [overlap ok] Query Int8
instance [overlap ok] Query Int
instance [overlap ok] Query Bool
instance [overlap ok] Path String
instance [overlap ok] Path ByteString
instance [overlap ok] Path ByteString
instance [overlap ok] Path Text
instance [overlap ok] Path Text
instance [overlap ok] Path Float
instance [overlap ok] Path Double
instance [overlap ok] Path Word64
instance [overlap ok] Path Word32
instance [overlap ok] Path Word16
instance [overlap ok] Path Word8
instance [overlap ok] Path Word
instance [overlap ok] Path Integer
instance [overlap ok] Path Int64
instance [overlap ok] Path Int32
instance [overlap ok] Path Int16
instance [overlap ok] Path Int8
instance [overlap ok] Path Int
instance [overlap ok] Path Bool
instance [overlap ok] Path Char
module Control.Monad.Apiary.Action
data ActionT m a
data ApiaryConfig
ApiaryConfig :: Application -> Status -> ResponseHeaders -> [ByteString] -> (FilePath -> ByteString) -> ApiaryConfig
-- | call when no handler matched.
notFound :: ApiaryConfig -> Application
-- | used unless call status function.
defaultStatus :: ApiaryConfig -> Status
-- | initial headers.
defaultHeader :: ApiaryConfig -> ResponseHeaders
-- | used by root filter.
rootPattern :: ApiaryConfig -> [ByteString]
mimeType :: ApiaryConfig -> FilePath -> ByteString
-- | stop handler and send current state. since 0.3.3.0.
stop :: Monad m => ActionT m a
-- | stop with response. since 0.4.2.0.
stopWith :: Monad m => Response -> ActionT m a
-- | get raw request. since 0.1.0.0.
getRequest :: Monad m => ActionT m Request
-- | get all request headers. since 0.6.0.0.
getHeaders :: Monad m => ActionT m RequestHeaders
-- | parse request body and return params. since 0.9.0.0.
getReqParams :: MonadIO m => ActionT m [Param]
-- | parse request body and return files. since 0.9.0.0.
getReqFiles :: MonadIO m => ActionT m [File ByteString]
-- | set status code. since 0.1.0.0.
status :: Monad m => Status -> ActionT m ()
-- | add response header. since 0.1.0.0.
addHeader :: Monad m => HeaderName -> ByteString -> ActionT m ()
-- | set response headers. since 0.1.0.0.
setHeaders :: Monad m => ResponseHeaders -> ActionT m ()
-- | modify response header. since 0.1.0.0.
modifyHeader :: Monad m => (ResponseHeaders -> ResponseHeaders) -> ActionT m ()
-- | set content-type header. if content-type header already exists,
-- replace it. since 0.1.0.0.
contentType :: Monad m => ByteString -> ActionT m ()
-- | set response body file content and detect Content-Type by extension.
-- since 0.1.0.0.
file :: Monad m => FilePath -> Maybe FilePart -> ActionT m ()
-- | set response body file content, without set Content-Type. since
-- 0.1.0.0.
file' :: Monad m => FilePath -> Maybe FilePart -> ActionT m ()
-- | set response body builder. since 0.1.0.0.
builder :: Monad m => Builder -> ActionT m ()
-- | set response body lazy bytestring. since 0.1.0.0.
lbs :: Monad m => ByteString -> ActionT m ()
-- | set response body source. since 0.9.0.0.
stream :: Monad m => StreamingBody -> ActionT m ()
type StreamingBody = Source IO (Flush Builder)
-- | redirect with:
--
-- 303 See Other (HTTP/1.1) or 302 Moved Temporarily (Other)
--
-- since 0.6.2.0.
redirect :: Monad m => ByteString -> ActionT m ()
-- | redirect with 301 Moved Permanently. since 0.3.3.0.
redirectPermanently :: Monad m => ByteString -> ActionT m ()
-- | redirect with:
--
-- 307 Temporary Redirect (HTTP/1.1) or 302 Moved Temporarily (Other)
--
-- since 0.3.3.0.
redirectTemporary :: Monad m => ByteString -> ActionT m ()
-- | redirect handler
--
-- set status and add location header. since 0.3.3.0.
--
-- rename from redirect in 0.6.2.0.
redirectWith :: Monad m => Status -> ByteString -> ActionT m ()
-- | redirect with 302 Found. since 0.3.3.0.
-- | Deprecated: use redirect
redirectFound :: Monad m => ByteString -> ActionT m ()
-- | redirect with 303 See Other. since 0.3.3.0.
-- | Deprecated: use redirect
redirectSeeOther :: Monad m => ByteString -> ActionT m ()
-- | Deprecated: use stream
source :: Monad m => StreamingBody -> ActionT m ()
module Control.Monad.Apiary.Filter.Internal
-- | low level filter function.
function :: (Functor n, Monad n) => (SList c -> Request -> Maybe (SList c')) -> ApiaryT c' n m b -> ApiaryT c n m b
-- | filter and append argument.
function' :: (Functor n, Monad n) => (Request -> Maybe a) -> ApiaryT (Snoc as a) n m b -> ApiaryT as n m b
-- | filter only(not modify arguments).
function_ :: (Functor n, Monad n) => (Request -> Bool) -> ApiaryT c n m b -> ApiaryT c n m b
-- | filter by action. since 0.6.1.0.
focus :: (Functor n, Monad n) => (SList c -> ActionT n (SList c')) -> ApiaryT c' n m a -> ApiaryT c n m a
module Control.Monad.Apiary
-- | most generic Apiary monad. since 0.8.0.0.
data ApiaryT c n m a
-- | no transformer. (ActionT IO, ApiaryT Identity)
type Apiary c = ApiaryT c IO Identity
runApiary :: ApiaryConfig -> Apiary '[] a -> Application
runApiaryT :: (Monad n, Monad m) => (forall b. n b -> IO b) -> ApiaryConfig -> ApiaryT '[] n m a -> m Application
apiaryConfig :: (Functor n, Monad n) => ApiaryT c n m ApiaryConfig
-- | splice ActionT ApiaryT.
action :: (Functor n, Monad n) => Fn c (ActionT n ()) -> ApiaryT c n m ()
-- | like action. but not apply arguments. since 0.8.0.0.
action' :: (Functor n, Monad n) => (SList c -> ActionT n ()) -> ApiaryT c n m ()
-- | execute action before main action. since v0.4.2.0
-- | Deprecated: use action'
actionWithPreAction :: (Functor n, Monad n) => (SList xs -> ActionT n a) -> Fn xs (ActionT n ()) -> ApiaryT xs n m ()
module Control.Monad.Apiary.Filter.Internal.Capture
data Equal
Equal :: Text -> Equal
type Fetch = Proxy
class CaptureElem a where type family Next a (xs :: [*]) :: [*]
captureElem :: CaptureElem a => a -> Text -> SList xs -> Maybe (SList (Next a xs))
type Capture as = All CaptureElem as
capture' :: Capture as => SList as -> [Text] -> SList xs -> Maybe (SList (CaptureResult xs as))
-- | low level (without Template Haskell) capture. since 0.4.2.0
--
--
-- myCapture :: SList '[Equal, Fetch Int, Fetch String]
-- myCapture = Equal "path" ::: pInt ::: pString ::: SNil
--
-- capture myCapture . stdMethod GET . action $ age name -> do
-- yourAction
--
capture :: (Functor n, Monad n) => Capture as => SList as -> ApiaryT (CaptureResult xs as) n m b -> ApiaryT xs n m b
instance Path a => CaptureElem (Fetch a)
instance CaptureElem Equal
module Control.Monad.Apiary.Filter
-- | filter by HTTP method. since 0.1.0.0.
method :: (Functor n, Monad n) => Method -> ApiaryT c n m a -> ApiaryT c n m a
-- | filter by HTTP method using StdMethod. since 0.1.0.0.
stdMethod :: (Functor n, Monad n) => StdMethod -> ApiaryT c n m a -> ApiaryT c n m a
-- | http version filter. since 0.5.0.0.
httpVersion :: (Functor n, Monad n) => HttpVersion -> ApiaryT c n m b -> ApiaryT c n m b
-- | http/0.9 only accepted fiter. since 0.5.0.0.
http09 :: (Functor n, Monad n) => ApiaryT c n m b -> ApiaryT c n m b
-- | http/1.0 only accepted fiter. since 0.5.0.0.
http10 :: (Functor n, Monad n) => ApiaryT c n m b -> ApiaryT c n m b
-- | http/1.1 only accepted fiter. since 0.5.0.0.
http11 :: (Functor n, Monad n) => ApiaryT c n m b -> ApiaryT c n m b
-- | filter by rootPattern of ApiaryConfig.
root :: (Functor n, Monad n) => ApiaryT c n m b -> ApiaryT c n m b
-- | capture QuasiQuoter. since 0.1.0.0.
--
-- example:
--
--
-- [capture|/path|] -- first path == path
-- [capture|/int/:Int|] -- first path == int && get 2nd path as Int.
-- [capture|/:Int/:Double|] -- get first path as Int and get 2nd path as Double.
--
capture :: QuasiQuoter
-- | low level query getter. since 0.5.0.0.
--
--
-- query key (Proxy :: Proxy (fetcher type))
--
--
-- examples:
--
--
-- query key (Proxy :: Proxy (First Int)) -- get first 'key' query parameter as Int.
-- query key (Proxy :: Proxy (Option (Maybe Int)) -- get first 'key' query parameter as Int. allow without param or value.
-- query key (Proxy :: Proxy (Many String) -- get all 'key' query parameter as String.
--
query :: (ReqParam a, Strategy w, Functor n, MonadIO n) => ByteString -> Proxy (w a) -> ApiaryT (SNext w as a) n m b -> ApiaryT as n m b
-- | get first matched paramerer. since 0.5.0.0.
--
--
-- key =: pInt == query key (pFirst pInt) == query key (Proxy :: Proxy (First Int))
--
(=:) :: (Functor n, MonadIO n, ReqParam a) => ByteString -> Proxy a -> ApiaryT (Snoc as a) n m b -> ApiaryT as n m b
-- | get one matched paramerer. since 0.5.0.0.
--
-- when more one parameger given, not matched.
--
--
-- key =: pInt == query key (pOne pInt) == query key (Proxy :: Proxy (One Int))
--
(=!:) :: (Functor n, MonadIO n, ReqParam a) => ByteString -> Proxy a -> ApiaryT (Snoc as a) n m b -> ApiaryT as n m b
-- | get optional first paramerer. since 0.5.0.0.
--
-- when illegal type parameter given, fail mather(don't give Nothing).
--
--
-- key =: pInt == query key (pOption pInt) == query key (Proxy :: Proxy (Option Int))
--
(=?:) :: (Functor n, MonadIO n, ReqParam a) => ByteString -> Proxy a -> ApiaryT (Snoc as (Maybe a)) n m b -> ApiaryT as n m b
-- | check parameger given and type. since 0.5.0.0.
--
-- If you wan't to allow any type, give pVoid.
--
--
-- key =: pInt == query key (pCheck pInt) == query key (Proxy :: Proxy (Check Int))
--
(?:) :: (Functor n, MonadIO n, ReqParam a) => ByteString -> Proxy a -> ApiaryT as n m b -> ApiaryT as n m b
-- | get many paramerer. since 0.5.0.0.
--
--
-- key =: pInt == query key (pMany pInt) == query key (Proxy :: Proxy (Many Int))
--
(=*:) :: (Functor n, MonadIO n, ReqParam a) => ByteString -> Proxy a -> ApiaryT (Snoc as [a]) n m b -> ApiaryT as n m b
-- | get some paramerer. since 0.5.0.0.
--
--
-- key =: pInt == query key (pSome pInt) == query key (Proxy :: Proxy (Some Int))
--
(=+:) :: (Functor n, MonadIO n, ReqParam a) => ByteString -> Proxy a -> ApiaryT (Snoc as [a]) n m b -> ApiaryT as n m b
-- | query exists checker.
--
--
-- hasQuery q = query q (Proxy :: Proxy (Check ()))
--
hasQuery :: (Functor n, MonadIO n) => ByteString -> ApiaryT c n m a -> ApiaryT c n m a
-- | check whether to exists specified header or not. since 0.6.0.0.
hasHeader :: (Functor n, Monad n) => HeaderName -> ApiaryT as n m b -> ApiaryT as n m b
-- | check whether to exists specified valued header or not. since 0.6.0.0.
eqHeader :: (Functor n, Monad n) => HeaderName -> ByteString -> ApiaryT as n m b -> ApiaryT as n m b
-- | filter by headers up to 100 entries. since 0.6.0.0.
headers :: (Functor n, Monad n) => HeaderName -> ApiaryT (Snoc as [ByteString]) n m b -> ApiaryT as n m b
-- | filter by header and get first. since 0.6.0.0.
header :: (Functor n, Monad n) => HeaderName -> ApiaryT (Snoc as ByteString) n m b -> ApiaryT as n m b
-- | low level header filter. since 0.6.0.0.
header' :: (Strategy w, Functor n, Monad n) => (forall x. Proxy x -> Proxy (w x)) -> (Header -> Bool) -> ApiaryT (SNext w as ByteString) n m b -> ApiaryT as n m b
-- | filter by ssl accessed. since 0.1.0.0.
ssl :: (Functor n, Monad n) => ApiaryT c n m a -> ApiaryT c n m a
module Web.Apiary
-- | shortcut action. since 0.6.0.0.
--
--
-- [act|200 .html|] == [act|200 text/html|] ==
-- action $ \arguments -> do
-- status 200
-- contentType text/html
--
act :: QuasiQuoter