diff --git a/src/Yesod/ReCaptcha2.hs b/src/Yesod/ReCaptcha2.hs
--- a/src/Yesod/ReCaptcha2.hs
+++ b/src/Yesod/ReCaptcha2.hs
@@ -5,46 +5,44 @@
 {-# LANGUAGE QuasiQuotes       #-}
 {-# LANGUAGE TupleSections     #-}
 module Yesod.ReCaptcha2
-    ( YesodReCaptcha(..)
-      -- * ReCaptcha V2
-    , reCaptcha
-    , mReCaptcha
-      -- * Invisible ReCaptcha
-      -- $invisibleReCaptcha
-    , reCaptchaInvisible
-    , mReCaptchaInvisible
-    , reCaptchaInvisibleForm
-    ) where
+  ( YesodReCaptcha(..)
+    -- * ReCaptcha V2
+  , reCaptcha
+  , mReCaptcha
+    -- * Invisible ReCaptcha
+    -- $invisibleReCaptcha
+  , reCaptchaInvisible
+  , mReCaptchaInvisible
+  , reCaptchaInvisibleForm
+  )
+where
 
 import           ClassyPrelude
 import           Data.Aeson
 import           Network.HTTP.Simple
 import           Yesod.Auth
 import           Yesod.Core
-import           Yesod.Core.Handler
-import           Yesod.Core.Types
-import           Yesod.Core.Widget
 import           Yesod.Form.Functions
 import           Yesod.Form.Types
 
 -- | default key is testing. you should impl reCaptchaSiteKey and reCaptchaSecretKey
 class YesodAuth site => YesodReCaptcha site where
-    reCaptchaSiteKey :: HandlerFor site Text
-    reCaptchaSiteKey = pure "6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI"
-    reCaptchaSecretKey :: HandlerFor site Text
-    reCaptchaSecretKey = pure "6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe"
-    -- | with specific language from
-    -- <https://developers.google.com/recaptcha/docs/language>
-    --
-    -- > reCaptchaLanguage = pure (Just "ru")
-    reCaptchaLanguage :: HandlerFor site (Maybe Text)
-    reCaptchaLanguage = pure Nothing
+  reCaptchaSiteKey :: HandlerFor site Text
+  reCaptchaSiteKey = pure "6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI"
+  reCaptchaSecretKey :: HandlerFor site Text
+  reCaptchaSecretKey = pure "6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe"
+  -- | with specific language from
+  -- <https://developers.google.com/recaptcha/docs/language>
+  --
+  -- > reCaptchaLanguage = pure (Just "ru")
+  reCaptchaLanguage :: HandlerFor site (Maybe Text)
+  reCaptchaLanguage = pure Nothing
 
 newtype SiteverifyResponse
-    = SiteverifyResponse
-    { success :: Bool
-    }
-    deriving (Eq, Ord, Read, Show, Generic, FromJSON, ToJSON)
+  = SiteverifyResponse
+  { success :: Bool
+  }
+  deriving (Eq, Ord, Read, Show, Generic, FromJSON, ToJSON)
 
 -- | for Applicative style form
 reCaptcha :: YesodReCaptcha site => AForm (HandlerFor site) ()
@@ -52,48 +50,43 @@
 
 -- | for Monadic style form
 mReCaptcha
-  :: YesodReCaptcha site =>
-  MForm (HandlerFor site) (FormResult (), [FieldView site])
+  :: YesodReCaptcha site
+  => MForm (HandlerFor site) (FormResult (), [FieldView site])
 mReCaptcha = do
-    result <- lift formResult
-    return (result, [fieldViewSite])
-  where formResult = do
-            postParam <- lookupPostParam "g-recaptcha-response"
-            case postParam of
-                Nothing -> return FormMissing
-                Just response -> do
-                    secret <- reCaptchaSecretKey
-                    SiteverifyResponse{success} <- liftIO $ do
-                        req <-
-                          parseRequest
-                          "POST https://www.google.com/recaptcha/api/siteverify"
-                        res <- httpJSON $
-                            setRequestBodyURLEncoded
-                            [ ("secret", encodeUtf8 secret)
-                            , ("response", encodeUtf8 response)
-                            ]
-                            req
-                        return $ getResponseBody res
-                    return $ if success
-                        then FormSuccess ()
-                        else FormFailure ["reCaptcha error"]
-        fieldViewSite = FieldView
-            { fvLabel = mempty
-            , fvTooltip = Nothing
-            , fvId = ""
-            , fvInput = do
-                    mReCaptchaLanguage <- handlerToWidget reCaptchaLanguage
-                    case mReCaptchaLanguage of
-                      Nothing ->
-                        addScriptRemote "https://www.google.com/recaptcha/api.js"
-                      Just hl ->
-                        addScriptRemote $
-                        "https://www.google.com/recaptcha/api.js?hl=" <> hl
-                    siteKey <- handlerToWidget reCaptchaSiteKey
-                    [whamlet|<div .g-recaptcha data-sitekey=#{siteKey}>|]
-            , fvErrors = Nothing
-            , fvRequired = True
-            }
+  result <- lift formResult
+  return (result, [fieldViewSite])
+ where
+  formResult = do
+    postParam <- lookupPostParam "g-recaptcha-response"
+    case postParam of
+      Nothing       -> return FormMissing
+      Just response -> do
+        secret                         <- reCaptchaSecretKey
+        SiteverifyResponse { success } <- liftIO $ do
+          req <- parseRequest
+            "POST https://www.google.com/recaptcha/api/siteverify"
+          res <- httpJSON $ setRequestBodyURLEncoded
+            [("secret", encodeUtf8 secret), ("response", encodeUtf8 response)]
+            req
+          return $ getResponseBody res
+        return $ if success
+          then FormSuccess ()
+          else FormFailure ["reCaptcha error"]
+  fieldViewSite = FieldView
+    { fvLabel    = mempty
+    , fvTooltip  = Nothing
+    , fvId       = ""
+    , fvInput    = do
+      mReCaptchaLanguage <- handlerToWidget reCaptchaLanguage
+      case mReCaptchaLanguage of
+        Nothing -> addScriptRemote "https://www.google.com/recaptcha/api.js"
+        Just hl ->
+          addScriptRemote $ "https://www.google.com/recaptcha/api.js?hl=" <> hl
+      siteKey <- handlerToWidget reCaptchaSiteKey
+      [whamlet|<div .g-recaptcha data-sitekey=#{siteKey}>|]
+    , fvErrors   = Nothing
+    , fvRequired = True
+    }
 
 -- $invisibleReCaptcha
 --
@@ -120,7 +113,7 @@
 
 -- | check for Applicative style form
 reCaptchaInvisible :: YesodReCaptcha site => AForm (HandlerFor site) ()
-reCaptchaInvisible = formToAForm ((,[]) <$> mReCaptchaInvisible)
+reCaptchaInvisible = formToAForm ((, []) <$> mReCaptchaInvisible)
 
 -- | check for Monadic style form
 mReCaptchaInvisible
@@ -129,30 +122,29 @@
 
 -- | generate all required parts (except the check) for a Invisible ReCaptcha
 reCaptchaInvisibleForm
-    :: YesodReCaptcha site
-    => Maybe Text -- ^ The id of the form, a new will be created when 'Nothing' is passed
-    -> Maybe Text
+  :: YesodReCaptcha site
+  => Maybe Text -- ^ The id of the form, a new will be created when 'Nothing' is passed
+  -> Maybe Text
     -- ^ The javascript to call after a successful captcha,
     -- it has to submit the form, a simple one will be generated when 'Nothing' is passed
-    -> HandlerFor site (Text, WidgetFor site (), [(Text, Text)])
+  -> HandlerFor site (Text, WidgetFor site (), [(Text, Text)])
 reCaptchaInvisibleForm mIdent mScript = do
-    mReCaptchaLanguage <- reCaptchaLanguage
-    siteKey <- reCaptchaSiteKey
-    identForm <- maybe newIdent return mIdent
-    scriptName <- maybe (("reCaptchaOnSubmit_" <>) <$> newIdent) return mScript
-    let
-      widget = do
+  mReCaptchaLanguage <- reCaptchaLanguage
+  siteKey            <- reCaptchaSiteKey
+  identForm          <- maybe newIdent return mIdent
+  scriptName <- maybe (("reCaptchaOnSubmit_" <>) <$> newIdent) return mScript
+  let widget = do
         case mReCaptchaLanguage of
-          Nothing ->
-            addScriptRemote "https://www.google.com/recaptcha/api.js"
+          Nothing -> addScriptRemote "https://www.google.com/recaptcha/api.js"
           Just hl ->
-            addScriptRemote $ "https://www.google.com/recaptcha/api.js?hl=" <> hl
-        when (isNothing mScript) $
-          toWidgetHead [hamlet|
+            addScriptRemote
+              $  "https://www.google.com/recaptcha/api.js?hl="
+              <> hl
+        when (isNothing mScript) $ toWidgetHead [hamlet|
 <script>function #{scriptName}(token) { document.getElementById("#{identForm}").submit(); }
 |]
-    return
-      ( identForm
-      , widget
-      , [("data-sitekey", siteKey), ("data-callback", scriptName)]
-      )
+  return
+    ( identForm
+    , widget
+    , [("data-sitekey", siteKey), ("data-callback", scriptName)]
+    )
diff --git a/yesod-recaptcha2.cabal b/yesod-recaptcha2.cabal
--- a/yesod-recaptcha2.cabal
+++ b/yesod-recaptcha2.cabal
@@ -1,13 +1,13 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.31.0.
+-- This file has been generated from package.yaml by hpack version 0.31.2.
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 2b3e3fe3c6054faefe316aba4920104bb8025b052b3857c3ff5444752b269ae7
+-- hash: 0cafa0f7133c8a452ecf0b1ed89843c8196dc8e6fef8abd2bfc61258a823a83c
 
 name:           yesod-recaptcha2
-version:        0.3.0
+version:        1.0.0
 synopsis:       yesod recaptcha2
 description:    recaptcha2 for yesod-form
 category:       Web
@@ -29,6 +29,7 @@
 library
   hs-source-dirs:
       src
+  ghc-options: -Wall -Widentities -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-exported-signatures -Wmissing-home-modules -Wredundant-constraints -Wcompat
   build-depends:
       aeson
     , base >=4.7 && <5
