Renamed RawRequest to Request
This commit is contained in:
parent
e857927e2d
commit
412402cdd4
@ -52,14 +52,14 @@ runFormGeneric params (Form f) =
|
|||||||
-- | Run a form against POST parameters.
|
-- | Run a form against POST parameters.
|
||||||
runFormPost :: Form x -> Handler y x
|
runFormPost :: Form x -> Handler y x
|
||||||
runFormPost f = do
|
runFormPost f = do
|
||||||
rr <- getRawRequest
|
rr <- getRequest
|
||||||
pp <- postParams rr
|
pp <- postParams rr
|
||||||
runFormGeneric pp f
|
runFormGeneric pp f
|
||||||
|
|
||||||
-- | Run a form against GET parameters.
|
-- | Run a form against GET parameters.
|
||||||
runFormGet :: Form x -> Handler y x
|
runFormGet :: Form x -> Handler y x
|
||||||
runFormGet f = do
|
runFormGet f = do
|
||||||
rr <- getRawRequest
|
rr <- getRequest
|
||||||
runFormGeneric (getParams rr) f
|
runFormGeneric (getParams rr) f
|
||||||
|
|
||||||
input :: ParamName -> Form [ParamValue]
|
input :: ParamName -> Form [ParamValue]
|
||||||
|
|||||||
@ -51,7 +51,7 @@ import Data.Object.Html
|
|||||||
import qualified Data.ByteString.Lazy as BL
|
import qualified Data.ByteString.Lazy as BL
|
||||||
import qualified Network.Wai as W
|
import qualified Network.Wai as W
|
||||||
|
|
||||||
data HandlerData yesod = HandlerData RawRequest yesod
|
data HandlerData yesod = HandlerData Request yesod
|
||||||
|
|
||||||
------ Handler monad
|
------ Handler monad
|
||||||
newtype Handler yesod a = Handler {
|
newtype Handler yesod a = Handler {
|
||||||
@ -84,7 +84,7 @@ instance MonadIO (Handler yesod) where
|
|||||||
instance Exception e => Failure e (Handler yesod) where
|
instance Exception e => Failure e (Handler yesod) where
|
||||||
failure e = Handler $ \_ -> return ([], HCError $ InternalError $ show e)
|
failure e = Handler $ \_ -> return ([], HCError $ InternalError $ show e)
|
||||||
instance RequestReader (Handler yesod) where
|
instance RequestReader (Handler yesod) where
|
||||||
getRawRequest = Handler $ \(HandlerData rr _)
|
getRequest = Handler $ \(HandlerData rr _)
|
||||||
-> return ([], HCContent rr)
|
-> return ([], HCContent rr)
|
||||||
|
|
||||||
getYesod :: Handler yesod yesod
|
getYesod :: Handler yesod yesod
|
||||||
@ -92,7 +92,7 @@ getYesod = Handler $ \(HandlerData _ yesod) -> return ([], HCContent yesod)
|
|||||||
|
|
||||||
runHandler :: Handler yesod ChooseRep
|
runHandler :: Handler yesod ChooseRep
|
||||||
-> (ErrorResponse -> Handler yesod ChooseRep)
|
-> (ErrorResponse -> Handler yesod ChooseRep)
|
||||||
-> RawRequest
|
-> Request
|
||||||
-> yesod
|
-> yesod
|
||||||
-> [ContentType]
|
-> [ContentType]
|
||||||
-> IO Response
|
-> IO Response
|
||||||
|
|||||||
@ -98,7 +98,7 @@ instance Exception ExpectedSingleParam
|
|||||||
|
|
||||||
authOpenidForm :: Yesod y => Handler y ChooseRep
|
authOpenidForm :: Yesod y => Handler y ChooseRep
|
||||||
authOpenidForm = do
|
authOpenidForm = do
|
||||||
rr <- getRawRequest
|
rr <- getRequest
|
||||||
case getParams rr "dest" of
|
case getParams rr "dest" of
|
||||||
[] -> return ()
|
[] -> return ()
|
||||||
(x:_) -> addCookie destCookieTimeout destCookieName x
|
(x:_) -> addCookie destCookieTimeout destCookieName x
|
||||||
@ -119,7 +119,7 @@ authOpenidForm = do
|
|||||||
|
|
||||||
authOpenidForward :: YesodAuth y => Handler y ()
|
authOpenidForward :: YesodAuth y => Handler y ()
|
||||||
authOpenidForward = do
|
authOpenidForward = do
|
||||||
rr <- getRawRequest
|
rr <- getRequest
|
||||||
oid <- case getParams rr "openid" of
|
oid <- case getParams rr "openid" of
|
||||||
[x] -> return x
|
[x] -> return x
|
||||||
_ -> invalidArgs [("openid", show ExpectedSingleParam)]
|
_ -> invalidArgs [("openid", show ExpectedSingleParam)]
|
||||||
@ -134,8 +134,8 @@ authOpenidForward = do
|
|||||||
|
|
||||||
authOpenidComplete :: YesodApproot y => Handler y ()
|
authOpenidComplete :: YesodApproot y => Handler y ()
|
||||||
authOpenidComplete = do
|
authOpenidComplete = do
|
||||||
rr <- getRawRequest
|
rr <- getRequest
|
||||||
let gets' = rawGetParams rr
|
let gets' = reqGetParams rr
|
||||||
res <- runAttemptT $ OpenId.authenticate gets'
|
res <- runAttemptT $ OpenId.authenticate gets'
|
||||||
let onFailure err = redirect RedirectTemporary
|
let onFailure err = redirect RedirectTemporary
|
||||||
$ "/auth/openid/?message="
|
$ "/auth/openid/?message="
|
||||||
@ -153,7 +153,7 @@ rpxnowLogin = do
|
|||||||
apiKey <- case rpxnowApiKey ay of
|
apiKey <- case rpxnowApiKey ay of
|
||||||
Just x -> return x
|
Just x -> return x
|
||||||
Nothing -> notFound
|
Nothing -> notFound
|
||||||
rr <- getRawRequest
|
rr <- getRequest
|
||||||
pp <- postParams rr
|
pp <- postParams rr
|
||||||
let token = case getParams rr "token" ++ pp "token" of
|
let token = case getParams rr "token" ++ pp "token" of
|
||||||
[] -> failure MissingToken
|
[] -> failure MissingToken
|
||||||
@ -201,14 +201,14 @@ authLogout = do
|
|||||||
-- | Gets the identifier for a user if available.
|
-- | Gets the identifier for a user if available.
|
||||||
maybeIdentifier :: (Functor m, Monad m, RequestReader m) => m (Maybe String)
|
maybeIdentifier :: (Functor m, Monad m, RequestReader m) => m (Maybe String)
|
||||||
maybeIdentifier =
|
maybeIdentifier =
|
||||||
fmap cs . lookup (B8.pack authCookieName) . rawSession
|
fmap cs . lookup (B8.pack authCookieName) . reqSession
|
||||||
<$> getRawRequest
|
<$> getRequest
|
||||||
|
|
||||||
-- | Gets the display name for a user if available.
|
-- | Gets the display name for a user if available.
|
||||||
displayName :: (Functor m, Monad m, RequestReader m) => m (Maybe String)
|
displayName :: (Functor m, Monad m, RequestReader m) => m (Maybe String)
|
||||||
displayName = do
|
displayName = do
|
||||||
rr <- getRawRequest
|
rr <- getRequest
|
||||||
return $ fmap cs $ lookup (B8.pack authDisplayName) $ rawSession rr
|
return $ fmap cs $ lookup (B8.pack authDisplayName) $ reqSession rr
|
||||||
|
|
||||||
-- | Gets the identifier for a user. If user is not logged in, redirects them
|
-- | Gets the identifier for a user. If user is not logged in, redirects them
|
||||||
-- to the login page.
|
-- to the login page.
|
||||||
@ -249,7 +249,7 @@ redirectSetDest rt dest = do
|
|||||||
-- cookie is missing, then use the default path provided.
|
-- cookie is missing, then use the default path provided.
|
||||||
redirectToDest :: RedirectType -> String -> Handler y a
|
redirectToDest :: RedirectType -> String -> Handler y a
|
||||||
redirectToDest rt def = do
|
redirectToDest rt def = do
|
||||||
rr <- getRawRequest
|
rr <- getRequest
|
||||||
dest <- case cookies rr destCookieName of
|
dest <- case cookies rr destCookieName of
|
||||||
[] -> return def
|
[] -> return def
|
||||||
(x:_) -> do
|
(x:_) -> do
|
||||||
|
|||||||
@ -4,6 +4,7 @@
|
|||||||
{-# LANGUAGE DeriveDataTypeable #-}
|
{-# LANGUAGE DeriveDataTypeable #-}
|
||||||
{-# LANGUAGE CPP #-}
|
{-# LANGUAGE CPP #-}
|
||||||
{-# LANGUAGE PackageImports #-}
|
{-# LANGUAGE PackageImports #-}
|
||||||
|
{-# LANGUAGE NoMonomorphismRestriction #-}
|
||||||
---------------------------------------------------------
|
---------------------------------------------------------
|
||||||
--
|
--
|
||||||
-- Module : Yesod.Request
|
-- Module : Yesod.Request
|
||||||
@ -19,8 +20,8 @@
|
|||||||
---------------------------------------------------------
|
---------------------------------------------------------
|
||||||
module Yesod.Request
|
module Yesod.Request
|
||||||
(
|
(
|
||||||
-- * RawRequest
|
-- * Request
|
||||||
RawRequest (..)
|
Request (..)
|
||||||
, RequestReader (..)
|
, RequestReader (..)
|
||||||
, waiRequest
|
, waiRequest
|
||||||
, cookies
|
, cookies
|
||||||
@ -60,30 +61,30 @@ type ParamValue = String
|
|||||||
type ParamError = String
|
type ParamError = String
|
||||||
|
|
||||||
class RequestReader m where
|
class RequestReader m where
|
||||||
getRawRequest :: m RawRequest
|
getRequest :: m Request
|
||||||
instance RequestReader ((->) RawRequest) where
|
instance RequestReader ((->) Request) where
|
||||||
getRawRequest = id
|
getRequest = id
|
||||||
|
|
||||||
languages :: (Functor m, RequestReader m) => m [Language]
|
languages :: (Functor m, RequestReader m) => m [Language]
|
||||||
languages = rawLangs `fmap` getRawRequest
|
languages = reqLangs `fmap` getRequest
|
||||||
|
|
||||||
-- | Get the raw 'W.Request' value.
|
-- | Get the req 'W.Request' value.
|
||||||
waiRequest :: (Functor m, RequestReader m) => m W.Request
|
waiRequest :: (Functor m, RequestReader m) => m W.Request
|
||||||
waiRequest = rawWaiRequest `fmap` getRawRequest
|
waiRequest = reqWaiRequest `fmap` getRequest
|
||||||
|
|
||||||
type RequestBodyContents =
|
type RequestBodyContents =
|
||||||
( [(ParamName, ParamValue)]
|
( [(ParamName, ParamValue)]
|
||||||
, [(ParamName, FileInfo String BL.ByteString)]
|
, [(ParamName, FileInfo String BL.ByteString)]
|
||||||
)
|
)
|
||||||
|
|
||||||
-- | The raw information passed through W, cleaned up a bit.
|
-- | The req information passed through W, cleaned up a bit.
|
||||||
data RawRequest = RawRequest
|
data Request = Request
|
||||||
{ rawGetParams :: [(ParamName, ParamValue)]
|
{ reqGetParams :: [(ParamName, ParamValue)]
|
||||||
, rawCookies :: [(ParamName, ParamValue)]
|
, reqCookies :: [(ParamName, ParamValue)]
|
||||||
, rawSession :: [(B.ByteString, B.ByteString)]
|
, reqSession :: [(B.ByteString, B.ByteString)]
|
||||||
, rawRequestBody :: IO RequestBodyContents
|
, reqRequestBody :: IO RequestBodyContents
|
||||||
, rawWaiRequest :: W.Request
|
, reqWaiRequest :: W.Request
|
||||||
, rawLangs :: [Language]
|
, reqLangs :: [Language]
|
||||||
}
|
}
|
||||||
|
|
||||||
multiLookup :: [(ParamName, ParamValue)] -> ParamName -> [ParamValue]
|
multiLookup :: [(ParamName, ParamValue)] -> ParamName -> [ParamValue]
|
||||||
@ -93,13 +94,13 @@ multiLookup ((k, v):rest) pn
|
|||||||
| otherwise = multiLookup rest pn
|
| otherwise = multiLookup rest pn
|
||||||
|
|
||||||
-- | All GET paramater values with the given name.
|
-- | All GET paramater values with the given name.
|
||||||
getParams :: RawRequest -> ParamName -> [ParamValue]
|
getParams :: Request -> ParamName -> [ParamValue]
|
||||||
getParams rr = multiLookup $ rawGetParams rr
|
getParams rr = multiLookup $ reqGetParams rr
|
||||||
|
|
||||||
-- | All POST paramater values with the given name.
|
-- | All POST paramater values with the given name.
|
||||||
postParams :: MonadIO m => RawRequest -> m (ParamName -> [ParamValue])
|
postParams :: MonadIO m => Request -> m (ParamName -> [ParamValue])
|
||||||
postParams rr = do
|
postParams rr = do
|
||||||
(pp, _) <- liftIO $ rawRequestBody rr
|
(pp, _) <- liftIO $ reqRequestBody rr
|
||||||
return $ multiLookup pp
|
return $ multiLookup pp
|
||||||
|
|
||||||
-- | Produces a \"compute on demand\" value. The computation will be run once
|
-- | Produces a \"compute on demand\" value. The computation will be run once
|
||||||
@ -116,14 +117,16 @@ iothunk = fmap go . newMVar . Left where
|
|||||||
return (Right val, val)
|
return (Right val, val)
|
||||||
|
|
||||||
-- | All cookies with the given name.
|
-- | All cookies with the given name.
|
||||||
cookies :: RawRequest -> ParamName -> [ParamValue]
|
cookies :: Request -> ParamName -> [ParamValue]
|
||||||
cookies rr name = map snd . filter (fst `equals` name) . rawCookies $ rr
|
cookies rr name = map snd . filter (fst `equals` name) . reqCookies $ rr
|
||||||
|
|
||||||
parseWaiRequest :: W.Request -> [(B.ByteString, B.ByteString)] -> IO RawRequest
|
parseWaiRequest :: W.Request
|
||||||
|
-> [(B.ByteString, B.ByteString)] -- ^ session
|
||||||
|
-> IO Request
|
||||||
parseWaiRequest env session = do
|
parseWaiRequest env session = do
|
||||||
let gets' = map (cs *** cs) $ decodeUrlPairs $ W.queryString env
|
let gets' = map (cs *** cs) $ decodeUrlPairs $ W.queryString env
|
||||||
let rawCookie = fromMaybe B.empty $ lookup W.Cookie $ W.requestHeaders env
|
let reqCookie = fromMaybe B.empty $ lookup W.Cookie $ W.requestHeaders env
|
||||||
cookies' = map (cs *** cs) $ parseCookies rawCookie
|
cookies' = map (cs *** cs) $ parseCookies reqCookie
|
||||||
acceptLang = lookup W.AcceptLanguage $ W.requestHeaders env
|
acceptLang = lookup W.AcceptLanguage $ W.requestHeaders env
|
||||||
langs = map cs $ maybe [] parseHttpAccept acceptLang
|
langs = map cs $ maybe [] parseHttpAccept acceptLang
|
||||||
langs' = case lookup langKey cookies' of
|
langs' = case lookup langKey cookies' of
|
||||||
@ -133,7 +136,7 @@ parseWaiRequest env session = do
|
|||||||
Nothing -> langs'
|
Nothing -> langs'
|
||||||
Just x -> x : langs'
|
Just x -> x : langs'
|
||||||
rbthunk <- iothunk $ rbHelper env
|
rbthunk <- iothunk $ rbHelper env
|
||||||
return $ RawRequest gets' cookies' session rbthunk env langs''
|
return $ Request gets' cookies' session rbthunk env langs''
|
||||||
|
|
||||||
rbHelper :: W.Request -> IO RequestBodyContents
|
rbHelper :: W.Request -> IO RequestBodyContents
|
||||||
rbHelper = fmap (fix1 *** map fix2) . parseRequestBody lbsSink where
|
rbHelper = fmap (fix1 *** map fix2) . parseRequestBody lbsSink where
|
||||||
|
|||||||
@ -242,7 +242,7 @@ responseToWaiResponse (Response sc hs ct c) = do
|
|||||||
#if TEST
|
#if TEST
|
||||||
runContent :: Content -> IO L.ByteString
|
runContent :: Content -> IO L.ByteString
|
||||||
runContent (ContentFile fp) = L.readFile fp
|
runContent (ContentFile fp) = L.readFile fp
|
||||||
runContent (ContentEnum c) = WE.toLBS c
|
runContent (ContentEnum c) = WE.toLBS $ W.Enumerator c
|
||||||
|
|
||||||
----- Testing
|
----- Testing
|
||||||
testSuite :: Test
|
testSuite :: Test
|
||||||
|
|||||||
@ -22,14 +22,14 @@ import Yesod.Response
|
|||||||
import Yesod.Yesod
|
import Yesod.Yesod
|
||||||
import Yesod.Handler
|
import Yesod.Handler
|
||||||
import Control.Monad (join)
|
import Control.Monad (join)
|
||||||
import Yesod.Request (RawRequest, getRawRequest)
|
import Yesod.Request (Request, getRequest)
|
||||||
|
|
||||||
type Template = StringTemplate Text
|
type Template = StringTemplate Text
|
||||||
type TemplateGroup = STGroup Text
|
type TemplateGroup = STGroup Text
|
||||||
|
|
||||||
class Yesod y => YesodTemplate y where
|
class Yesod y => YesodTemplate y where
|
||||||
getTemplateGroup :: y -> TemplateGroup
|
getTemplateGroup :: y -> TemplateGroup
|
||||||
defaultTemplateAttribs :: y -> RawRequest -> HtmlTemplate
|
defaultTemplateAttribs :: y -> Request -> HtmlTemplate
|
||||||
-> IO HtmlTemplate
|
-> IO HtmlTemplate
|
||||||
|
|
||||||
getTemplateGroup' :: YesodTemplate y => Handler y TemplateGroup
|
getTemplateGroup' :: YesodTemplate y => Handler y TemplateGroup
|
||||||
@ -56,7 +56,7 @@ templateHtml tn f = do
|
|||||||
t <- case getStringTemplate tn tg of
|
t <- case getStringTemplate tn tg of
|
||||||
Nothing -> failure $ NoSuchTemplate tn
|
Nothing -> failure $ NoSuchTemplate tn
|
||||||
Just x -> return x
|
Just x -> return x
|
||||||
rr <- getRawRequest
|
rr <- getRequest
|
||||||
return $ RepHtml $ ioTextToContent
|
return $ RepHtml $ ioTextToContent
|
||||||
$ fmap (render . unHtmlTemplate)
|
$ fmap (render . unHtmlTemplate)
|
||||||
$ join
|
$ join
|
||||||
@ -79,7 +79,7 @@ templateHtmlJson :: YesodTemplate y
|
|||||||
templateHtmlJson tn ho f = do
|
templateHtmlJson tn ho f = do
|
||||||
tg <- getTemplateGroup'
|
tg <- getTemplateGroup'
|
||||||
y <- getYesod
|
y <- getYesod
|
||||||
rr <- getRawRequest
|
rr <- getRequest
|
||||||
t <- case getStringTemplate tn tg of
|
t <- case getStringTemplate tn tg of
|
||||||
Nothing -> failure $ NoSuchTemplate tn
|
Nothing -> failure $ NoSuchTemplate tn
|
||||||
Just x -> return x
|
Just x -> return x
|
||||||
|
|||||||
@ -46,14 +46,14 @@ class Yesod a where
|
|||||||
|
|
||||||
-- | Applies some form of layout to <title> and <body> contents of a page.
|
-- | Applies some form of layout to <title> and <body> contents of a page.
|
||||||
applyLayout :: a
|
applyLayout :: a
|
||||||
-> RawRequest
|
-> Request
|
||||||
-> String -- ^ title
|
-> String -- ^ title
|
||||||
-> Html -- ^ body
|
-> Html -- ^ body
|
||||||
-> Content
|
-> Content
|
||||||
applyLayout _ _ t b = cs (cs (Tag "title" [] $ cs t, b) :: HtmlDoc)
|
applyLayout _ _ t b = cs (cs (Tag "title" [] $ cs t, b) :: HtmlDoc)
|
||||||
|
|
||||||
-- | Gets called at the beginning of each request. Useful for logging.
|
-- | Gets called at the beginning of each request. Useful for logging.
|
||||||
onRequest :: a -> RawRequest -> IO ()
|
onRequest :: a -> Request -> IO ()
|
||||||
onRequest _ _ = return ()
|
onRequest _ _ = return ()
|
||||||
|
|
||||||
class Yesod a => YesodApproot a where
|
class Yesod a => YesodApproot a where
|
||||||
@ -67,7 +67,7 @@ applyLayout' :: Yesod y
|
|||||||
-> Handler y ChooseRep
|
-> Handler y ChooseRep
|
||||||
applyLayout' t b = do
|
applyLayout' t b = do
|
||||||
y <- getYesod
|
y <- getYesod
|
||||||
rr <- getRawRequest
|
rr <- getRequest
|
||||||
return $ chooseRep
|
return $ chooseRep
|
||||||
[ (TypeHtml, applyLayout y rr t b)
|
[ (TypeHtml, applyLayout y rr t b)
|
||||||
]
|
]
|
||||||
@ -80,7 +80,7 @@ applyLayoutJson :: Yesod y
|
|||||||
-> Handler y ChooseRep
|
-> Handler y ChooseRep
|
||||||
applyLayoutJson t b = do
|
applyLayoutJson t b = do
|
||||||
y <- getYesod
|
y <- getYesod
|
||||||
rr <- getRawRequest
|
rr <- getRequest
|
||||||
return $ chooseRep
|
return $ chooseRep
|
||||||
[ (TypeHtml, applyLayout y rr t $ cs b)
|
[ (TypeHtml, applyLayout y rr t $ cs b)
|
||||||
, (TypeJson, cs $ unJsonDoc $ cs b)
|
, (TypeJson, cs $ unJsonDoc $ cs b)
|
||||||
|
|||||||
@ -89,7 +89,7 @@ one piece of data.
|
|||||||
|
|
||||||
> factRedirect :: Handler y ()
|
> factRedirect :: Handler y ()
|
||||||
> factRedirect = do
|
> factRedirect = do
|
||||||
> rr <- getRawRequest
|
> rr <- getRequest
|
||||||
> let i = case getParams rr "num" of -- FIXME
|
> let i = case getParams rr "num" of -- FIXME
|
||||||
> [] -> "1"
|
> [] -> "1"
|
||||||
> (x:_) -> x
|
> (x:_) -> x
|
||||||
|
|||||||
@ -22,8 +22,8 @@ homepageH = templateHtml "pretty-yaml" return
|
|||||||
|
|
||||||
showYamlH :: Handler PY RepHtmlJson
|
showYamlH :: Handler PY RepHtmlJson
|
||||||
showYamlH = do
|
showYamlH = do
|
||||||
rr <- getRawRequest
|
rr <- getRequest
|
||||||
(_, files) <- liftIO $ rawRequestBody rr
|
(_, files) <- liftIO $ reqRequestBody rr
|
||||||
fi <- case lookup "yaml" files of
|
fi <- case lookup "yaml" files of
|
||||||
Nothing -> invalidArgs [("yaml", "Missing input")]
|
Nothing -> invalidArgs [("yaml", "Missing input")]
|
||||||
Just x -> return x
|
Just x -> return x
|
||||||
|
|||||||
18
yesod.cabal
18
yesod.cabal
@ -38,7 +38,7 @@ library
|
|||||||
authenticate >= 0.4.0 && < 0.5,
|
authenticate >= 0.4.0 && < 0.5,
|
||||||
predicates >= 0.1 && < 0.2,
|
predicates >= 0.1 && < 0.2,
|
||||||
bytestring >= 0.9.1.4 && < 0.10,
|
bytestring >= 0.9.1.4 && < 0.10,
|
||||||
web-encodings >= 0.4.0 && < 0.5,
|
web-encodings >= 0.2.4 && < 0.3,
|
||||||
data-object >= 0.2.0 && < 0.3,
|
data-object >= 0.2.0 && < 0.3,
|
||||||
data-object-yaml >= 0.2.0 && < 0.3,
|
data-object-yaml >= 0.2.0 && < 0.3,
|
||||||
directory >= 1 && < 1.1,
|
directory >= 1 && < 1.1,
|
||||||
@ -107,3 +107,19 @@ executable fact
|
|||||||
Buildable: False
|
Buildable: False
|
||||||
ghc-options: -Wall
|
ghc-options: -Wall
|
||||||
main-is: examples/fact.lhs
|
main-is: examples/fact.lhs
|
||||||
|
|
||||||
|
executable i18n
|
||||||
|
if flag(buildsamples)
|
||||||
|
Buildable: True
|
||||||
|
else
|
||||||
|
Buildable: False
|
||||||
|
ghc-options: -Wall
|
||||||
|
main-is: examples/i18n.hs
|
||||||
|
|
||||||
|
executable pretty-yaml
|
||||||
|
if flag(buildsamples)
|
||||||
|
Buildable: True
|
||||||
|
else
|
||||||
|
Buildable: False
|
||||||
|
ghc-options: -Wall
|
||||||
|
main-is: examples/pretty-yaml.hs
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user