Permalink
Browse files

Merge pull request #1341 from yesodweb/pedantic

Compile with -Wall -Werror
  • Loading branch information...
2 parents 07147f4 + aefd074 commit 52f67fb04bebd050aa27b4a13fe2ca73aedf25f2 @snoyberg snoyberg committed on GitHub Feb 5, 2017
Showing with 366 additions and 242 deletions.
  1. +2 −2 .travis.yml
  2. +4 −4 yesod-auth-oauth/Yesod/Auth/OAuth.hs
  3. +2 −2 yesod-auth/Yesod/Auth.hs
  4. +26 −23 yesod-auth/Yesod/Auth/Email.hs
  5. +1 −1 yesod-auth/Yesod/Auth/GoogleEmail.hs
  6. +21 −7 yesod-auth/Yesod/Auth/GoogleEmail2.hs
  7. +2 −2 yesod-auth/Yesod/Auth/Hardcoded.hs
  8. +2 −2 yesod-auth/Yesod/Auth/Message.hs
  9. +1 −15 yesod-auth/Yesod/PasswordStore.hs
  10. +4 −4 yesod-bin/Build.hs
  11. +1 −0 yesod-core/Yesod/Core/Class/Handler.hs
  12. +7 −9 yesod-core/Yesod/Core/Class/Yesod.hs
  13. +2 −2 yesod-core/Yesod/Core/Handler.hs
  14. +1 −1 yesod-core/Yesod/Core/Json.hs
  15. +5 −0 yesod-core/Yesod/Core/Types.hs
  16. +7 −7 yesod-core/bench/widget.hs
  17. +0 −5 yesod-core/test.hs
  18. +3 −0 yesod-core/test/Hierarchy.hs
  19. +21 −11 yesod-core/test/RouteSpec.hs
  20. +5 −1 yesod-core/test/YesodCoreTest/Auth.hs
  21. +5 −1 yesod-core/test/YesodCoreTest/Cache.hs
  22. +6 −2 yesod-core/test/YesodCoreTest/CleanPath.hs
  23. +3 −1 yesod-core/test/YesodCoreTest/ErrorHandling.hs
  24. +5 −1 yesod-core/test/YesodCoreTest/Exceptions.hs
  25. +3 −3 yesod-core/test/YesodCoreTest/InternalRequest.hs
  26. +5 −1 yesod-core/test/YesodCoreTest/JsLoader.hs
  27. +5 −1 yesod-core/test/YesodCoreTest/JsLoaderSites/Bottom.hs
  28. +5 −1 yesod-core/test/YesodCoreTest/Json.hs
  29. +11 −3 yesod-core/test/YesodCoreTest/Links.hs
  30. +6 −2 yesod-core/test/YesodCoreTest/NoOverloadedStrings.hs
  31. +8 −8 yesod-core/test/YesodCoreTest/RawResponse.hs
  32. +5 −1 yesod-core/test/YesodCoreTest/Redirect.hs
  33. +5 −1 yesod-core/test/YesodCoreTest/Reps.hs
  34. +5 −1 yesod-core/test/YesodCoreTest/RequestBodySize.hs
  35. +5 −1 yesod-core/test/YesodCoreTest/StubLaxSameSite.hs
  36. +5 −1 yesod-core/test/YesodCoreTest/StubSslOnly.hs
  37. +5 −1 yesod-core/test/YesodCoreTest/StubStrictSameSite.hs
  38. +5 −1 yesod-core/test/YesodCoreTest/StubUnsecured.hs
  39. +5 −1 yesod-core/test/YesodCoreTest/WaiSubsite.hs
  40. +4 −1 yesod-core/test/YesodCoreTest/Widget.hs
  41. +0 −1 yesod-core/test/test.hs
  42. +5 −0 yesod-core/test/test.hs
  43. +40 −1 yesod-core/yesod-core.cabal
  44. +3 −3 yesod-eventsource/Yesod/EventSource.hs
  45. +10 −14 yesod-form/Yesod/Form/Fields.hs
  46. +3 −6 yesod-form/Yesod/Form/Functions.hs
  47. +1 −1 yesod-form/Yesod/Form/I18n/Czech.hs
  48. +1 −1 yesod-form/Yesod/Form/I18n/Dutch.hs
  49. +1 −1 yesod-form/Yesod/Form/I18n/English.hs
  50. +1 −1 yesod-form/Yesod/Form/I18n/French.hs
  51. +1 −1 yesod-form/Yesod/Form/I18n/German.hs
  52. +1 −1 yesod-form/Yesod/Form/I18n/Japanese.hs
  53. +1 −1 yesod-form/Yesod/Form/I18n/Norwegian.hs
  54. +1 −1 yesod-form/Yesod/Form/I18n/Portuguese.hs
  55. +1 −1 yesod-form/Yesod/Form/I18n/Russian.hs
  56. +2 −2 yesod-form/Yesod/Form/I18n/Spanish.hs
  57. +1 −1 yesod-form/Yesod/Form/I18n/Swedish.hs
  58. +1 −1 yesod-form/Yesod/Form/Input.hs
  59. +2 −3 yesod-form/Yesod/Form/Jquery.hs
  60. +3 −4 yesod-form/Yesod/Form/MassInput.hs
  61. +1 −2 yesod-form/Yesod/Form/Nic.hs
  62. +6 −6 yesod-form/Yesod/Form/Types.hs
  63. +1 −1 yesod-persistent/Yesod/Persist/Core.hs
  64. +4 −6 yesod-static/Yesod/EmbeddedStatic.hs
  65. +4 −5 yesod-static/Yesod/EmbeddedStatic/Generators.hs
  66. +3 −5 yesod-static/Yesod/EmbeddedStatic/Internal.hs
  67. +1 −6 yesod-static/Yesod/Static.hs
  68. +6 −6 yesod-static/test/GeneratorTestUtil.hs
  69. +11 −0 yesod-static/yesod-static.cabal
  70. +6 −9 yesod-test/Yesod/Test.hs
  71. +2 −2 yesod-test/Yesod/Test/TransversingCSS.hs
  72. +14 −6 yesod-test/test/main.hs
  73. +2 −2 yesod-websockets/Yesod/WebSockets.hs
  74. +0 −4 yesod/Yesod/Default/Config2.hs
  75. +3 −6 yesod/Yesod/Default/Main.hs
View
@@ -178,9 +178,9 @@ script:
if [ `uname` = "Darwin" ]
then
# Use slightly less intensive options on OS X due to Travis timeouts
- stack --no-terminal $ARGS test --fast
+ stack --no-terminal $ARGS test --fast --pedantic
else
- stack --no-terminal $ARGS test --bench --no-run-benchmarks --haddock --no-haddock-deps
+ stack --no-terminal $ARGS test --bench --no-run-benchmarks --haddock --no-haddock-deps --pedantic
fi
;;
cabal)
@@ -10,7 +10,7 @@ module Yesod.Auth.OAuth
, tumblrUrl
, module Web.Authenticate.OAuth
) where
-import Control.Applicative ((<$>), (<*>))
+import Control.Applicative as A ((<$>), (<*>))
import Control.Arrow ((***))
import Control.Exception.Lifted
import Control.Monad.IO.Class
@@ -66,8 +66,8 @@ authOAuth oauth mkCreds = AuthPlugin name dispatch login
]
else do
(verifier, oaTok) <-
- runInputGet $ (,) <$> ireq textField "oauth_verifier"
- <*> ireq textField "oauth_token"
+ runInputGet $ (,) A.<$> ireq textField "oauth_verifier"
+ A.<*> ireq textField "oauth_token"
return $ Credential [ ("oauth_verifier", encodeUtf8 verifier)
, ("oauth_token", encodeUtf8 oaTok)
, ("oauth_token_secret", encodeUtf8 tokSec)
@@ -83,7 +83,7 @@ authOAuth oauth mkCreds = AuthPlugin name dispatch login
let oaUrl = render $ tm $ oauthUrl name
[whamlet| <a href=#{oaUrl}>Login via #{name} |]
-mkExtractCreds :: YesodAuth m => Text -> String -> Credential -> IO (Creds m)
+mkExtractCreds :: Text -> String -> Credential -> IO (Creds m)
mkExtractCreds name idName (Credential dic) = do
let mcrId = decodeUtf8With lenientDecode <$> lookup (encodeUtf8 $ T.pack idName) dic
case mcrId of
@@ -167,7 +167,7 @@ class (Yesod master, PathPiece (AuthId master), RenderMessage master FormMessage
-- > lift $ redirect HomeR -- or any other Handler code you want
-- > defaultLoginHandler
--
- loginHandler :: AuthHandler master Html
+ loginHandler :: HandlerT Auth (HandlerT master IO) Html
loginHandler = defaultLoginHandler
-- | Used for i18n of messages provided by this package.
@@ -227,7 +227,7 @@ class (Yesod master, PathPiece (AuthId master), RenderMessage master FormMessage
-- This is an experimental API that is not broadly used throughout the yesod-auth code base
runHttpRequest :: Request -> (Response BodyReader -> HandlerT master IO a) -> HandlerT master IO a
runHttpRequest req inner = do
- man <- authHttpManager <$> getYesod
+ man <- authHttpManager Control.Applicative.<$> getYesod
HandlerT $ \t -> withResponse req man $ \res -> unHandlerT (inner res) t
{-# MINIMAL loginDest, logoutDest, (authenticate | getAuthId), authPlugins, authHttpManager #-}
@@ -131,8 +131,7 @@ import Data.Time (addUTCTime, getCurrentTime)
import Safe (readMay)
import System.IO.Unsafe (unsafePerformIO)
import qualified Text.Email.Validate
-import Network.HTTP.Types.Status (status400)
-import Data.Aeson.Types (Parser(..), Result(..), parseMaybe, withObject, (.:?))
+import Data.Aeson.Types (Parser, Result(..), parseMaybe, withObject, (.:?))
import Data.Maybe (isJust, isNothing, fromJust)
loginR, registerR, forgotPasswordR, setpassR :: AuthRoute
@@ -170,10 +169,10 @@ data EmailCreds site = EmailCreds
, emailCredsEmail :: Email
}
-data ForgotPasswordForm = ForgotPasswordForm { forgotEmail :: Text }
-data PasswordForm = PasswordForm { passwordCurrent :: Text, passwordNew :: Text, passwordConfirm :: Text }
-data UserForm = UserForm { email :: Text }
-data UserLoginForm = UserLoginForm { loginEmail :: Text, loginPassword :: Text }
+data ForgotPasswordForm = ForgotPasswordForm { _forgotEmail :: Text }
+data PasswordForm = PasswordForm { _passwordCurrent :: Text, _passwordNew :: Text, _passwordConfirm :: Text }
+data UserForm = UserForm { _userFormEmail :: Text }
+data UserLoginForm = UserLoginForm { _loginEmail :: Text, _loginPassword :: Text }
class ( YesodAuth site
, PathPiece (AuthEmailId site)
@@ -298,7 +297,7 @@ class ( YesodAuth site
-- Default: 'defaultRegisterHandler'.
--
-- @since: 1.2.6
- registerHandler :: AuthHandler site Html
+ registerHandler :: HandlerT Auth (HandlerT site IO) Html
registerHandler = defaultRegisterHandler
-- | Handler called to render the \"forgot password\" page.
@@ -308,7 +307,7 @@ class ( YesodAuth site
-- Default: 'defaultForgotPasswordHandler'.
--
-- @since: 1.2.6
- forgotPasswordHandler :: AuthHandler site Html
+ forgotPasswordHandler :: HandlerT Auth (HandlerT site IO) Html
forgotPasswordHandler = defaultForgotPasswordHandler
-- | Handler called to render the \"set password\" page. The
@@ -324,7 +323,7 @@ class ( YesodAuth site
-- field for the old password should be presented.
-- Otherwise, just two fields for the new password are
-- needed.
- -> AuthHandler site TypedContent
+ -> HandlerT Auth (HandlerT site IO) TypedContent
setPasswordHandler = defaultSetPasswordHandler
authEmail :: (YesodAuthEmail m) => AuthPlugin m
@@ -352,7 +351,7 @@ emailLoginHandler toParent = do
(widget, enctype) <- liftWidgetT $ generateFormPost loginForm
[whamlet|
- <form method="post" action="@{toParent loginR}">
+ <form method="post" action="@{toParent loginR}", enctype=#{enctype}>
<div id="emailLoginForm">
^{widget}
<div>
@@ -371,7 +370,8 @@ emailLoginHandler toParent = do
passwordMsg <- renderMessage' Msg.Password
(passwordRes, passwordView) <- mreq passwordField (passwordSettings passwordMsg) Nothing
- let userRes = UserLoginForm <$> emailRes <*> passwordRes
+ let userRes = UserLoginForm Control.Applicative.<$> emailRes
+ Control.Applicative.<*> passwordRes
let widget = do
[whamlet|
#{extra}
@@ -405,7 +405,7 @@ emailLoginHandler toParent = do
-- | Default implementation of 'registerHandler'.
--
-- @since 1.2.6
-defaultRegisterHandler :: YesodAuthEmail master => AuthHandler master Html
+defaultRegisterHandler :: YesodAuthEmail master => HandlerT Auth (HandlerT master IO) Html
defaultRegisterHandler = do
(widget, enctype) <- lift $ generateFormPost registrationForm
toParentRoute <- getRouteToParent
@@ -502,7 +502,7 @@ getForgotPasswordR = forgotPasswordHandler
-- | Default implementation of 'forgotPasswordHandler'.
--
-- @since 1.2.6
-defaultForgotPasswordHandler :: YesodAuthEmail master => AuthHandler master Html
+defaultForgotPasswordHandler :: YesodAuthEmail master => HandlerT Auth (HandlerT master IO) Html
defaultForgotPasswordHandler = do
(widget, enctype) <- lift $ generateFormPost forgotPasswordForm
toParent <- getRouteToParent
@@ -603,21 +603,21 @@ postLoginR = do
, emailCredsEmail <$> mecreds
, emailCredsStatus <$> mecreds
) of
- (Just aid, Just email, Just True) -> do
+ (Just aid, Just email', Just True) -> do
mrealpass <- lift $ getPassword aid
case mrealpass of
Nothing -> return Nothing
Just realpass -> return $ if isValidPass pass realpass
- then Just email
+ then Just email'
else Nothing
_ -> return Nothing
let isEmail = Text.Email.Validate.isValid $ encodeUtf8 identifier
case maid of
- Just email ->
+ Just email' ->
lift $ setCredsRedirect $ Creds
(if isEmail then "email" else "username")
- email
- [("verifiedEmail", email)]
+ email'
+ [("verifiedEmail", email')]
Nothing ->
loginErrorMessageI LoginR $
if isEmail
@@ -636,22 +636,22 @@ getPasswordR = do
-- | Default implementation of 'setPasswordHandler'.
--
-- @since 1.2.6
-defaultSetPasswordHandler :: YesodAuthEmail master => Bool -> AuthHandler master TypedContent
+defaultSetPasswordHandler :: YesodAuthEmail master => Bool -> HandlerT Auth (HandlerT master IO) TypedContent
defaultSetPasswordHandler needOld = do
messageRender <- lift getMessageRender
toParent <- getRouteToParent
selectRep $ do
provideJsonMessage $ messageRender Msg.SetPass
provideRep $ lift $ authLayout $ do
- (widget, enctype) <- liftWidgetT $ generateFormPost $ setPasswordForm needOld
+ (widget, enctype) <- liftWidgetT $ generateFormPost setPasswordForm
setTitleI Msg.SetPassTitle
[whamlet|
<h3>_{Msg.SetPass}
- <form method="post" action="@{toParent setpassR}">
+ <form method="post" action="@{toParent setpassR}" enctype=#{enctype}>
^{widget}
|]
where
- setPasswordForm needOld extra = do
+ setPasswordForm extra = do
(currentPasswordRes, currentPasswordView) <- mreq passwordField currentPasswordSettings Nothing
(newPasswordRes, newPasswordView) <- mreq passwordField newPasswordSettings Nothing
(confirmPasswordRes, confirmPasswordView) <- mreq passwordField confirmPasswordSettings Nothing
@@ -823,7 +823,10 @@ loginLinkKey = "_AUTH_EMAIL_LOGIN_LINK"
-- | Set 'loginLinkKey' to the current time.
--
-- @since 1.2.1
-setLoginLinkKey :: (YesodAuthEmail site, MonadHandler m, HandlerSite m ~ site) => AuthId site -> m ()
+--setLoginLinkKey :: (MonadHandler m) => AuthId site -> m ()
+setLoginLinkKey :: (MonadHandler m, YesodAuthEmail (HandlerSite m))
+ => AuthId (HandlerSite m)
+ -> m ()
setLoginLinkKey aid = do
now <- liftIO getCurrentTime
setSession loginLinkKey $ TS.pack $ show (toPathPiece aid, now)
@@ -71,7 +71,7 @@ authGoogleEmail =
completeHelper posts
dispatch _ _ = notFound
-completeHelper :: YesodAuth master => [(Text, Text)] -> AuthHandler master TypedContent
+completeHelper :: [(Text, Text)] -> AuthHandler master TypedContent
completeHelper gets' = do
master <- lift getYesod
eres <- lift $ try $ OpenId.authenticateClaimed gets' (authHttpManager master)
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
@@ -59,7 +60,7 @@ import Yesod.Core (HandlerSite, HandlerT, MonadHandler,
lift, liftIO, lookupGetParam,
lookupSession, notFound, redirect,
setSession, whamlet, (.:),
- addMessage, getYesod, authRoute,
+ addMessage, getYesod,
toHtml)
@@ -85,8 +86,9 @@ import qualified Data.Text as T
import Data.Text.Encoding (decodeUtf8, encodeUtf8)
import qualified Data.Text.Lazy as TL
import qualified Data.Text.Lazy.Builder as TL
-import Network.HTTP.Client (Manager, parseUrl, requestHeaders,
+import Network.HTTP.Client (Manager, requestHeaders,
responseBody, urlEncodedBody)
+import qualified Network.HTTP.Client as HTTP
import Network.HTTP.Client.Conduit (Request, bodyReaderSource)
import Network.HTTP.Conduit (http)
import Network.HTTP.Types (renderQueryText)
@@ -167,7 +169,7 @@ authPlugin storeToken clientID clientSecret =
return $ decodeUtf8
$ toByteString
$ fromByteString "https://accounts.google.com/o/oauth2/auth"
- `mappend` renderQueryText True qs
+ `Data.Monoid.mappend` renderQueryText True qs
login tm = do
[whamlet|<a href=@{tm forwardUrl}>_{Msg.LoginGoogle}|]
@@ -206,7 +208,13 @@ authPlugin storeToken clientID clientSecret =
render <- getUrlRender
- req' <- liftIO $ parseUrl "https://accounts.google.com/o/oauth2/token" -- FIXME don't hardcode, use: https://accounts.google.com/.well-known/openid-configuration
+ req' <- liftIO $
+#if MIN_VERSION_http_client(0,4,30)
+ HTTP.parseUrlThrow
+#else
+ HTTP.parseUrl
+#endif
+ "https://accounts.google.com/o/oauth2/token" -- FIXME don't hardcode, use: https://accounts.google.com/.well-known/openid-configuration
let req =
urlEncodedBody
[ ("code", encodeUtf8 code)
@@ -264,7 +272,13 @@ getPerson manager token = parseMaybe parseJSON <$> (do
personValueRequest :: MonadIO m => Token -> m Request
personValueRequest token = do
- req2' <- liftIO $ parseUrl "https://www.googleapis.com/plus/v1/people/me"
+ req2' <- liftIO $
+#if MIN_VERSION_http_client(0,4,30)
+ HTTP.parseUrlThrow
+#else
+ HTTP.parseUrl
+#endif
+ "https://www.googleapis.com/plus/v1/people/me"
return req2'
{ requestHeaders =
[ ("Authorization", encodeUtf8 $ "Bearer " `mappend` accessToken token)
@@ -284,8 +298,8 @@ data Token = Token { accessToken :: Text
instance FromJSON Token where
parseJSON = withObject "Tokens" $ \o -> Token
- <$> o .: "access_token"
- <*> o .: "token_type"
+ Control.Applicative.<$> o .: "access_token"
+ Control.Applicative.<*> o .: "token_type"
--------------------------------------------------------------------------------
-- | Gender of the person
@@ -186,8 +186,8 @@ postLoginR :: (YesodAuthHardcoded master)
=> HandlerT Auth (HandlerT master IO) TypedContent
postLoginR =
do (username, password) <- lift (runInputPost
- ((,) <$> ireq textField "username"
- <*> ireq textField "password"))
+ ((,) Control.Applicative.<$> ireq textField "username"
+ Control.Applicative.<*> ireq textField "password"))
isValid <- lift (validatePassword username password)
if isValid
then lift (setCredsRedirect (Creds "hardcoded" username []))
@@ -87,7 +87,7 @@ englishMessage RegisterLong = "Register a new account"
englishMessage EnterEmail = "Enter your e-mail address below, and a confirmation e-mail will be sent to you."
englishMessage ConfirmationEmailSentTitle = "Confirmation e-mail sent"
englishMessage (ConfirmationEmailSent email) =
- "A confirmation e-mail has been sent to " `mappend`
+ "A confirmation e-mail has been sent to " `Data.Monoid.mappend`
email `mappend`
"."
englishMessage AddressVerified = "Address verified, please set a new password"
@@ -464,7 +464,7 @@ finnishMessage LoginYahoo = "Kirjaudu Yahoo-tilillä"
finnishMessage Email = "Sähköposti"
finnishMessage UserName = "Käyttäjätunnus" -- FIXME by Google Translate "user name"
finnishMessage Password = "Salasana"
-finnishMessage Password = "Current password"
+finnishMessage CurrentPassword = "Current password"
finnishMessage Register = "Luo uusi"
finnishMessage RegisterLong = "Luo uusi tili"
finnishMessage EnterEmail = "Kirjoita alle sähköpostiosoitteesi, johon vahvistussähköposti lähetetään."
@@ -163,7 +163,7 @@ pbkdf2 password (SaltBS salt) c =
let hLen = 32
dkLen = hLen in go hLen dkLen
where
- go hLen dkLen | dkLen > (2^32 - 1) * hLen = error "Derived key too long."
+ go hLen dkLen | dkLen > (2^(32 :: Int) - 1) * hLen = error "Derived key too long."
| otherwise =
let !l = ceiling ((fromIntegral dkLen / fromIntegral hLen) :: Double)
!r = dkLen - (l - 1) * hLen
@@ -413,17 +413,3 @@ modifySTRef' ref f = do
let x' = f x
x' `seq` writeSTRef ref x'
#endif
-
-#if MIN_VERSION_bytestring(0, 10, 0)
-toStrict :: BL.ByteString -> BS.ByteString
-toStrict = BL.toStrict
-
-fromStrict :: BS.ByteString -> BL.ByteString
-fromStrict = BL.fromStrict
-#else
-toStrict :: BL.ByteString -> BS.ByteString
-toStrict = BS.concat . BL.toChunks
-
-fromStrict :: BS.ByteString -> BL.ByteString
-fromStrict = BL.fromChunks . return
-#endif
View
@@ -11,7 +11,7 @@ module Build
, safeReadFile
) where
-import Control.Applicative ((<|>), many, (<$>))
+import Control.Applicative as App ((<|>), many, (<$>))
import qualified Data.Attoparsec.Text as A
import Data.Char (isSpace, isUpper)
import qualified Data.Text as T
@@ -28,7 +28,7 @@ import Control.Monad.Trans.Writer (WriterT, tell, execWriterT)
import Control.Monad.IO.Class (MonadIO, liftIO)
import Control.Monad.Trans.Class (lift)
-import Data.Monoid (Monoid (mappend, mempty))
+import Data.Monoid (Monoid (..))
import qualified Data.Map as Map
import qualified Data.Set as Set
@@ -77,7 +77,7 @@ getDeps hsSourceDirs = do
return $ (hss, fixDeps $ zip hss deps')
data AnyFilesTouched = NoFilesTouched | SomeFilesTouched
-instance Monoid AnyFilesTouched where
+instance Data.Monoid.Monoid AnyFilesTouched where
mempty = NoFilesTouched
mappend NoFilesTouched NoFilesTouched = mempty
mappend _ _ = SomeFilesTouched
@@ -201,7 +201,7 @@ determineDeps x = do
Left _ -> return []
Right r -> mapM go r >>= filterM (doesFileExist . snd) . concat
where
- go (Just (StaticFiles fp, _)) = map ((,) AlwaysOutdated) <$> getFolderContents fp
+ go (Just (StaticFiles fp, _)) = map ((,) AlwaysOutdated) App.<$> getFolderContents fp
go (Just (Hamlet, f)) = return [(AlwaysOutdated, f)]
go (Just (Widget, f)) = return
[ (AlwaysOutdated, "templates/" ++ f ++ ".hamlet")
@@ -5,6 +5,7 @@
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE UndecidableInstances #-}
+{-# OPTIONS_GHC -fno-warn-warnings-deprecations #-} -- Because of ErrorT
module Yesod.Core.Class.Handler
( MonadHandler (..)
, MonadWidget (..)
Oops, something went wrong.

0 comments on commit 52f67fb

Please sign in to comment.