diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,13 @@
 # ChangeLog for yesod-form
 
+## 1.7.9.2
+
+* Improve deprecation messages for `radioField` and `checkboxesField` [#1902](https://github.com/yesodweb/yesod/pull/1902)
+
+## 1.7.9.1
+
+* Set `base >= 4.11` for less CPP and imports [#1876](https://github.com/yesodweb/yesod/pull/1876)
+
 ## 1.7.9
 
 * Added `checkboxesField'` for creating checkbox in more correct way than original `checkboxesField`
diff --git a/Yesod/Form/Bootstrap3.hs b/Yesod/Form/Bootstrap3.hs
--- a/Yesod/Form/Bootstrap3.hs
+++ b/Yesod/Form/Bootstrap3.hs
@@ -1,6 +1,8 @@
+{-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE QuasiQuotes #-}
 {-# LANGUAGE TypeFamilies #-}
-{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeOperators #-}
+
 -- | Helper functions for creating forms when using <http://getbootstrap.com/ Bootstrap 3>.
 --
 
@@ -112,10 +114,10 @@
 toOffset (ColLg columns) = "col-lg-offset-" ++ show columns
 
 addGO :: BootstrapGridOptions -> BootstrapGridOptions -> BootstrapGridOptions
-addGO (ColXs a) (ColXs b) = ColXs (a+b)
-addGO (ColSm a) (ColSm b) = ColSm (a+b)
-addGO (ColMd a) (ColMd b) = ColMd (a+b)
-addGO (ColLg a) (ColLg b) = ColLg (a+b)
+addGO (ColXs a) (ColXs b) = ColXs (a + b)
+addGO (ColSm a) (ColSm b) = ColSm (a + b)
+addGO (ColMd a) (ColMd b) = ColMd (a + b)
+addGO (ColLg a) (ColLg b) = ColLg (a + b)
 addGO a b     | a > b = addGO b a
 addGO (ColXs a) other = addGO (ColSm a) other
 addGO (ColSm a) other = addGO (ColMd a) other
diff --git a/Yesod/Form/Fields.hs b/Yesod/Form/Fields.hs
--- a/Yesod/Form/Fields.hs
+++ b/Yesod/Form/Fields.hs
@@ -1,11 +1,13 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE ConstraintKinds #-}
-{-# LANGUAGE QuasiQuotes #-}
-{-# LANGUAGE TypeFamilies #-}
-{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE QuasiQuotes #-}
 {-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE TypeOperators #-}
+
 -- | Field functions allow you to easily create and validate forms, cleanly handling the uncertainty of parsing user input.
 --
 -- When possible, the field functions use a specific input type (e.g. "number"), allowing supporting browsers to validate the input before form submission. Browsers can also improve usability with this information; for example, mobile browsers might present a specialized keyboard for an input of type "email" or "number".
@@ -111,7 +113,7 @@
 import Yesod.Persist (selectList, Filter, SelectOpt, Key)
 import Control.Arrow ((&&&))
 
-import Control.Applicative ((<$>), (<|>))
+import Control.Applicative ((<|>))
 
 import Data.Attoparsec.Text (Parser, char, string, digit, skipSpace, endOfInput, parseOnly)
 
@@ -119,14 +121,11 @@
 
 import Data.String (IsString)
 
-#if !MIN_VERSION_base(4,8,0)
-import Data.Monoid
-#endif
 
 import Data.Char (isHexDigit)
 
-{-# DEPRECATED radioField "This function seems to have a bug (label could not be found with byLabel algorithm)" #-}
-{-# DEPRECATED checkboxesField "This function seems to have a bug (label could not be found with byLabel algorithm)" #-}
+{-# DEPRECATED radioField "This function seems to have a bug (label could not be found with byLabel algorithm). Use radioField' instead." #-}
+{-# DEPRECATED checkboxesField "This function seems to have a bug (label could not be found with byLabel algorithm). Use checkboxesField' instead." #-}
 
 defaultFormMessage :: FormMessage -> Text
 defaultFormMessage = englishFormMessage
@@ -344,7 +343,7 @@
   where
     hour = do
         x <- digit
-        y <- (return Control.Applicative.<$> digit) <|> return []
+        y <- (return <$> digit) <|> return []
         let xy = x : y
         let i = read xy
         if i < 0 || i >= 24
@@ -1019,7 +1018,7 @@
                            then "-0." `T.append` (T.drop 2 t1)
                            else t1
 
-  where t1 = T.dropWhile (==' ') t0
+  where t1 = T.dropWhile (== ' ') t0
 
 -- $optionsOverview
 -- These functions create inputs where one or more options can be selected from a list.
diff --git a/Yesod/Form/Functions.hs b/Yesod/Form/Functions.hs
--- a/Yesod/Form/Functions.hs
+++ b/Yesod/Form/Functions.hs
@@ -1,10 +1,12 @@
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE QuasiQuotes #-}
+{-# LANGUAGE RecordWildCards #-}
 {-# LANGUAGE TupleSections #-}
 {-# LANGUAGE TypeFamilies #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE RecordWildCards #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE TypeOperators #-}
+
 module Yesod.Form.Functions
     ( -- * Running in MForm monad
       newFormIdent
@@ -72,7 +74,6 @@
 #define toHtml toMarkup
 import Yesod.Core
 import Network.Wai (requestMethod)
-import Data.Monoid (mempty, (<>))
 import Data.Maybe (listToMaybe, fromMaybe)
 import qualified Data.Map as Map
 import qualified Data.Text.Encoding as TE
@@ -328,7 +329,7 @@
     let tokenKey = defaultCsrfParamName
     let token =
             case reqToken req of
-                Nothing -> Data.Monoid.mempty
+                Nothing -> mempty
                 Just n -> [shamlet|<input type=hidden name=#{tokenKey} value=#{n}>|]
     m <- getYesod
     langs <- languages
diff --git a/Yesod/Form/I18n/Chinese.hs b/Yesod/Form/I18n/Chinese.hs
--- a/Yesod/Form/I18n/Chinese.hs
+++ b/Yesod/Form/I18n/Chinese.hs
@@ -1,12 +1,12 @@
 {-# LANGUAGE OverloadedStrings #-}
+
 module Yesod.Form.I18n.Chinese where
 
 import Yesod.Form.Types (FormMessage (..))
-import Data.Monoid (mappend)
 import Data.Text (Text)
 
 chineseFormMessage :: FormMessage -> Text
-chineseFormMessage (MsgInvalidInteger t) = "无效的整数: " `Data.Monoid.mappend` t
+chineseFormMessage (MsgInvalidInteger t) = "无效的整数: " `mappend` t
 chineseFormMessage (MsgInvalidNumber t) = "无效的数字: " `mappend` t
 chineseFormMessage (MsgInvalidEntry t) = "无效的条目: " `mappend` t
 chineseFormMessage MsgInvalidTimeFormat = "无效的时间, 必须符合HH:MM[:SS]格式"
diff --git a/Yesod/Form/I18n/Czech.hs b/Yesod/Form/I18n/Czech.hs
--- a/Yesod/Form/I18n/Czech.hs
+++ b/Yesod/Form/I18n/Czech.hs
@@ -1,12 +1,12 @@
 {-# LANGUAGE OverloadedStrings #-}
+
 module Yesod.Form.I18n.Czech where
 
 import Yesod.Form.Types (FormMessage (..))
-import Data.Monoid (mappend)
 import Data.Text (Text)
 
 czechFormMessage :: FormMessage -> Text
-czechFormMessage (MsgInvalidInteger t) = "Neplatné celé číslo: " `Data.Monoid.mappend` t
+czechFormMessage (MsgInvalidInteger t) = "Neplatné celé číslo: " `mappend` t
 czechFormMessage (MsgInvalidNumber t) = "Neplatné číslo: " `mappend` t
 czechFormMessage (MsgInvalidEntry t) = "Neplatná položka: " `mappend` t
 czechFormMessage MsgInvalidTimeFormat = "Neplatný čas, musí být ve formátu HH:MM[:SS]"
diff --git a/Yesod/Form/I18n/Dutch.hs b/Yesod/Form/I18n/Dutch.hs
--- a/Yesod/Form/I18n/Dutch.hs
+++ b/Yesod/Form/I18n/Dutch.hs
@@ -1,12 +1,12 @@
 {-# LANGUAGE OverloadedStrings #-}
+
 module Yesod.Form.I18n.Dutch where
 
 import Yesod.Form.Types (FormMessage (..))
-import Data.Monoid (mappend)
 import Data.Text (Text)
 
 dutchFormMessage :: FormMessage -> Text
-dutchFormMessage (MsgInvalidInteger t) = "Ongeldig aantal: " `Data.Monoid.mappend` t
+dutchFormMessage (MsgInvalidInteger t) = "Ongeldig aantal: " `mappend` t
 dutchFormMessage (MsgInvalidNumber t)  = "Ongeldig getal: " `mappend` t
 dutchFormMessage (MsgInvalidEntry t)   = "Ongeldige invoer: " `mappend` t
 dutchFormMessage MsgInvalidTimeFormat  = "Ongeldige tijd, het juiste formaat is (UU:MM[:SS])"
diff --git a/Yesod/Form/I18n/English.hs b/Yesod/Form/I18n/English.hs
--- a/Yesod/Form/I18n/English.hs
+++ b/Yesod/Form/I18n/English.hs
@@ -1,12 +1,12 @@
 {-# LANGUAGE OverloadedStrings #-}
+
 module Yesod.Form.I18n.English where
 
 import Yesod.Form.Types (FormMessage (..))
-import Data.Monoid (mappend)
 import Data.Text (Text)
 
 englishFormMessage :: FormMessage -> Text
-englishFormMessage (MsgInvalidInteger t) = "Invalid integer: " `Data.Monoid.mappend` t
+englishFormMessage (MsgInvalidInteger t) = "Invalid integer: " `mappend` t
 englishFormMessage (MsgInvalidNumber t) = "Invalid number: " `mappend` t
 englishFormMessage (MsgInvalidEntry t) = "Invalid entry: " `mappend` t
 englishFormMessage MsgInvalidTimeFormat = "Invalid time, must be in HH:MM[:SS] format"
diff --git a/Yesod/Form/I18n/French.hs b/Yesod/Form/I18n/French.hs
--- a/Yesod/Form/I18n/French.hs
+++ b/Yesod/Form/I18n/French.hs
@@ -1,12 +1,12 @@
 {-# LANGUAGE OverloadedStrings #-}
+
 module Yesod.Form.I18n.French (frenchFormMessage) where
 
 import Yesod.Form.Types (FormMessage (..))
-import Data.Monoid (mappend)
 import Data.Text (Text)
 
 frenchFormMessage :: FormMessage -> Text
-frenchFormMessage (MsgInvalidInteger t) = "Entier invalide : " `Data.Monoid.mappend` t
+frenchFormMessage (MsgInvalidInteger t) = "Entier invalide : " `mappend` t
 frenchFormMessage (MsgInvalidNumber t) = "Nombre invalide : " `mappend` t
 frenchFormMessage (MsgInvalidEntry t) = "Entrée invalide : " `mappend` t
 frenchFormMessage MsgInvalidTimeFormat = "Heure invalide (elle doit être au format HH:MM ou HH:MM:SS"
diff --git a/Yesod/Form/I18n/German.hs b/Yesod/Form/I18n/German.hs
--- a/Yesod/Form/I18n/German.hs
+++ b/Yesod/Form/I18n/German.hs
@@ -1,12 +1,12 @@
 {-# LANGUAGE OverloadedStrings #-}
+
 module Yesod.Form.I18n.German where
 
 import Yesod.Form.Types (FormMessage (..))
-import Data.Monoid (mappend)
 import Data.Text (Text)
 
 germanFormMessage :: FormMessage -> Text
-germanFormMessage (MsgInvalidInteger t) = "Ungültige Ganzzahl: " `Data.Monoid.mappend` t
+germanFormMessage (MsgInvalidInteger t) = "Ungültige Ganzzahl: " `mappend` t
 germanFormMessage (MsgInvalidNumber t) = "Ungültige Zahl: " `mappend` t
 germanFormMessage (MsgInvalidEntry t) = "Ungültiger Eintrag: " `mappend` t
 germanFormMessage MsgInvalidTimeFormat = "Ungültiges Zeitformat, HH:MM[:SS] Format erwartet"
diff --git a/Yesod/Form/I18n/Japanese.hs b/Yesod/Form/I18n/Japanese.hs
--- a/Yesod/Form/I18n/Japanese.hs
+++ b/Yesod/Form/I18n/Japanese.hs
@@ -1,12 +1,12 @@
 {-# LANGUAGE OverloadedStrings #-}
+
 module Yesod.Form.I18n.Japanese where
 
 import Yesod.Form.Types (FormMessage (..))
-import Data.Monoid (mappend)
 import Data.Text (Text)
 
 japaneseFormMessage :: FormMessage -> Text
-japaneseFormMessage (MsgInvalidInteger t) = "無効な整数です: " `Data.Monoid.mappend` t
+japaneseFormMessage (MsgInvalidInteger t) = "無効な整数です: " `mappend` t
 japaneseFormMessage (MsgInvalidNumber t) = "無効な数値です: " `mappend` t
 japaneseFormMessage (MsgInvalidEntry t) = "無効な入力です: " `mappend` t
 japaneseFormMessage MsgInvalidTimeFormat = "無効な時刻です。HH:MM[:SS]フォーマットで入力してください"
diff --git a/Yesod/Form/I18n/Korean.hs b/Yesod/Form/I18n/Korean.hs
--- a/Yesod/Form/I18n/Korean.hs
+++ b/Yesod/Form/I18n/Korean.hs
@@ -1,12 +1,12 @@
 {-# LANGUAGE OverloadedStrings #-}
+
 module Yesod.Form.I18n.Korean where
 
 import Yesod.Form.Types (FormMessage (..))
-import Data.Monoid (mappend)
 import Data.Text (Text)
 
 koreanFormMessage :: FormMessage -> Text
-koreanFormMessage (MsgInvalidInteger t) = "잘못된 정수입니다: " `Data.Monoid.mappend` t
+koreanFormMessage (MsgInvalidInteger t) = "잘못된 정수입니다: " `mappend` t
 koreanFormMessage (MsgInvalidNumber t) = "잘못된 숫자입니다: " `mappend` t
 koreanFormMessage (MsgInvalidEntry t) = "잘못된 입력입니다: " `mappend` t
 koreanFormMessage MsgInvalidTimeFormat = "잘못된 시간입니다. HH:MM[:SS] 형태로 입력하세요"
diff --git a/Yesod/Form/I18n/Norwegian.hs b/Yesod/Form/I18n/Norwegian.hs
--- a/Yesod/Form/I18n/Norwegian.hs
+++ b/Yesod/Form/I18n/Norwegian.hs
@@ -1,12 +1,12 @@
 {-# LANGUAGE OverloadedStrings #-}
+
 module Yesod.Form.I18n.Norwegian where
 
 import Yesod.Form.Types (FormMessage (..))
-import Data.Monoid (mappend)
 import Data.Text (Text)
 
 norwegianBokmålFormMessage :: FormMessage -> Text
-norwegianBokmålFormMessage (MsgInvalidInteger t) = "Ugyldig antall: " `Data.Monoid.mappend` t
+norwegianBokmålFormMessage (MsgInvalidInteger t) = "Ugyldig antall: " `mappend` t
 norwegianBokmålFormMessage (MsgInvalidNumber t) = "Ugyldig nummer: " `mappend` t
 norwegianBokmålFormMessage (MsgInvalidEntry t) = "Ugyldig oppføring: " `mappend` t
 norwegianBokmålFormMessage MsgInvalidTimeFormat = "Ugyldig klokkeslett, må være i formatet HH:MM[:SS]"
diff --git a/Yesod/Form/I18n/Portuguese.hs b/Yesod/Form/I18n/Portuguese.hs
--- a/Yesod/Form/I18n/Portuguese.hs
+++ b/Yesod/Form/I18n/Portuguese.hs
@@ -1,12 +1,12 @@
 {-# LANGUAGE OverloadedStrings #-}
+
 module Yesod.Form.I18n.Portuguese where
 
 import Yesod.Form.Types (FormMessage (..))
-import Data.Monoid (mappend)
 import Data.Text (Text)
 
 portugueseFormMessage :: FormMessage -> Text
-portugueseFormMessage (MsgInvalidInteger t) = "Número inteiro inválido: " `Data.Monoid.mappend` t
+portugueseFormMessage (MsgInvalidInteger t) = "Número inteiro inválido: " `mappend` t
 portugueseFormMessage (MsgInvalidNumber t) = "Número inválido: " `mappend` t
 portugueseFormMessage (MsgInvalidEntry t) = "Entrada inválida: " `mappend` t
 portugueseFormMessage MsgInvalidTimeFormat = "Hora inválida, deve estar no formato HH:MM[:SS]"
diff --git a/Yesod/Form/I18n/Romanian.hs b/Yesod/Form/I18n/Romanian.hs
--- a/Yesod/Form/I18n/Romanian.hs
+++ b/Yesod/Form/I18n/Romanian.hs
@@ -1,15 +1,15 @@
 {-# LANGUAGE OverloadedStrings #-}
+
 module Yesod.Form.I18n.Romanian where
 
 import Yesod.Form.Types (FormMessage (..))
-import Data.Monoid (mappend)
 import Data.Text (Text)
 
 -- | Romanian translation
 --
 -- @since 1.7.5
 romanianFormMessage :: FormMessage -> Text
-romanianFormMessage (MsgInvalidInteger t) = "Număr întreg nevalid: " `Data.Monoid.mappend` t
+romanianFormMessage (MsgInvalidInteger t) = "Număr întreg nevalid: " `mappend` t
 romanianFormMessage (MsgInvalidNumber t) = "Număr nevalid: " `mappend` t
 romanianFormMessage (MsgInvalidEntry t) = "Valoare nevalidă: " `mappend` t
 romanianFormMessage MsgInvalidTimeFormat = "Oră nevalidă. Formatul necesar este HH:MM[:SS]"
diff --git a/Yesod/Form/I18n/Russian.hs b/Yesod/Form/I18n/Russian.hs
--- a/Yesod/Form/I18n/Russian.hs
+++ b/Yesod/Form/I18n/Russian.hs
@@ -1,12 +1,12 @@
 {-# LANGUAGE OverloadedStrings #-}
+
 module Yesod.Form.I18n.Russian where
 
 import Yesod.Form.Types (FormMessage (..))
-import Data.Monoid (mappend)
 import Data.Text (Text)
 
 russianFormMessage :: FormMessage -> Text
-russianFormMessage (MsgInvalidInteger t) = "Неверно записано целое число: " `Data.Monoid.mappend` t
+russianFormMessage (MsgInvalidInteger t) = "Неверно записано целое число: " `mappend` t
 russianFormMessage (MsgInvalidNumber t) = "Неверный формат числа: " `mappend` t
 russianFormMessage (MsgInvalidEntry t) = "Неверный выбор: " `mappend` t
 russianFormMessage MsgInvalidTimeFormat = "Неверно указано время, используйте формат ЧЧ:ММ[:СС]"
diff --git a/Yesod/Form/I18n/Spanish.hs b/Yesod/Form/I18n/Spanish.hs
--- a/Yesod/Form/I18n/Spanish.hs
+++ b/Yesod/Form/I18n/Spanish.hs
@@ -3,11 +3,10 @@
 module Yesod.Form.I18n.Spanish where
 
 import Yesod.Form.Types (FormMessage (..))
-import Data.Monoid (mappend)
 import Data.Text (Text)
 
 spanishFormMessage :: FormMessage -> Text
-spanishFormMessage (MsgInvalidInteger t) = "Número entero inválido: " `Data.Monoid.mappend` t
+spanishFormMessage (MsgInvalidInteger t) = "Número entero inválido: " `mappend` t
 spanishFormMessage (MsgInvalidNumber t) = "Número inválido: " `mappend` t
 spanishFormMessage (MsgInvalidEntry t) = "Entrada inválida: " `mappend` t
 spanishFormMessage MsgInvalidTimeFormat = "Hora inválida, debe tener el formato HH:MM[:SS]"
diff --git a/Yesod/Form/I18n/Swedish.hs b/Yesod/Form/I18n/Swedish.hs
--- a/Yesod/Form/I18n/Swedish.hs
+++ b/Yesod/Form/I18n/Swedish.hs
@@ -1,12 +1,12 @@
 {-# LANGUAGE OverloadedStrings #-}
+
 module Yesod.Form.I18n.Swedish where
 
 import Yesod.Form.Types (FormMessage (..))
-import Data.Monoid (mappend)
 import Data.Text (Text)
 
 swedishFormMessage :: FormMessage -> Text
-swedishFormMessage (MsgInvalidInteger t) = "Ogiltigt antal: " `Data.Monoid.mappend` t
+swedishFormMessage (MsgInvalidInteger t) = "Ogiltigt antal: " `mappend` t
 swedishFormMessage (MsgInvalidNumber t) = "Ogiltigt nummer: " `mappend` t
 swedishFormMessage (MsgInvalidEntry t) = "Invalid entry: " `mappend` t
 swedishFormMessage MsgInvalidTimeFormat = "Ogiltigt klockslag, måste vara på formatet HH:MM[:SS]"
diff --git a/Yesod/Form/Input.hs b/Yesod/Form/Input.hs
--- a/Yesod/Form/Input.hs
+++ b/Yesod/Form/Input.hs
@@ -1,5 +1,6 @@
-{-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE OverloadedStrings #-}
+
 -- | Provides for getting input from either GET or POST params without
 -- generating HTML forms. For more information, see:
 -- <http://www.yesodweb.com/book/forms#forms_kinds_of_forms>.
@@ -15,7 +16,6 @@
 
 import Yesod.Form.Types
 import Data.Text (Text)
-import Control.Applicative (Applicative (..))
 import Yesod.Core
 import Control.Monad (liftM, (<=<))
 import qualified Data.Map as Map
@@ -29,7 +29,7 @@
 newtype FormInput m a = FormInput { unFormInput :: HandlerSite m -> [Text] -> Env -> FileEnv -> m (Either DText a) }
 instance Monad m => Functor (FormInput m) where
     fmap a (FormInput f) = FormInput $ \c d e e' -> liftM (either Left (Right . a)) $ f c d e e'
-instance Monad m => Control.Applicative.Applicative (FormInput m) where
+instance Monad m => Applicative (FormInput m) where
     pure = FormInput . const . const . const . const . return . Right
     (FormInput f) <*> (FormInput x) = FormInput $ \c d e e' -> do
         res1 <- f c d e e'
diff --git a/Yesod/Form/Jquery.hs b/Yesod/Form/Jquery.hs
--- a/Yesod/Form/Jquery.hs
+++ b/Yesod/Form/Jquery.hs
@@ -1,7 +1,9 @@
-{-# LANGUAGE QuasiQuotes #-}
-{-# LANGUAGE TypeFamilies #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE QuasiQuotes #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE TypeOperators #-}
+
 -- | Some fields spiced up with jQuery UI.
 module Yesod.Form.Jquery
     ( YesodJquery (..)
@@ -20,11 +22,10 @@
 import Data.Default
 import Text.Julius (rawJS)
 import Data.Text (Text, pack, unpack)
-import Data.Monoid (mconcat)
 
 -- | Gets the Google hosted jQuery UI 1.8 CSS file with the given theme.
 googleHostedJqueryUiCss :: Text -> Text
-googleHostedJqueryUiCss theme = Data.Monoid.mconcat
+googleHostedJqueryUiCss theme = mconcat
     [ "//ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/"
     , theme
     , "/jquery-ui.css"
diff --git a/Yesod/Form/MassInput.hs b/Yesod/Form/MassInput.hs
--- a/Yesod/Form/MassInput.hs
+++ b/Yesod/Form/MassInput.hs
@@ -1,8 +1,9 @@
-{-# LANGUAGE QuasiQuotes #-}
+{-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE QuasiQuotes #-}
 {-# LANGUAGE TypeFamilies #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE TypeOperators #-}
+
 -- | A module providing a means of creating multiple input forms, such as a
 -- list of 0 or more recipients.
 module Yesod.Form.MassInput
diff --git a/Yesod/Form/Nic.hs b/Yesod/Form/Nic.hs
--- a/Yesod/Form/Nic.hs
+++ b/Yesod/Form/Nic.hs
@@ -1,8 +1,9 @@
-{-# LANGUAGE QuasiQuotes #-}
-{-# LANGUAGE TypeFamilies #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE QuasiQuotes #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE TypeOperators #-}
+
 -- | Provide the user with a rich text editor.
 --
 -- According to NIC editor homepage it is not actively maintained since June
diff --git a/Yesod/Form/Types.hs b/Yesod/Form/Types.hs
--- a/Yesod/Form/Types.hs
+++ b/Yesod/Form/Types.hs
@@ -1,8 +1,9 @@
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE TypeFamilies #-}
-{-# LANGUAGE ExistentialQuantification #-}
 {-# LANGUAGE CPP #-}
+{-# LANGUAGE ExistentialQuantification #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeFamilies #-}
+
 module Yesod.Form.Types
     ( -- * Helpers
       Enctype (..)
@@ -25,18 +26,16 @@
 import Control.Monad.Trans.RWS (RWST)
 import Control.Monad.Trans.Writer (WriterT)
 import Data.Text (Text)
-import Data.Monoid (Monoid (..))
 import Text.Blaze (Markup, ToMarkup (toMarkup), ToValue (toValue))
 #define Html Markup
 #define ToHtml ToMarkup
 #define toHtml toMarkup
-import Control.Applicative ((<$>), Alternative (..), Applicative (..))
+import Control.Applicative (Alternative (..))
 import Control.Monad (liftM)
 import Control.Monad.Trans.Class
 import Data.String (IsString (..))
 import Yesod.Core
 import qualified Data.Map as Map
-import Data.Semigroup (Semigroup, (<>))
 import Data.Traversable
 import Data.Foldable
 
@@ -55,18 +54,18 @@
     fmap _ FormMissing = FormMissing
     fmap _ (FormFailure errs) = FormFailure errs
     fmap f (FormSuccess a) = FormSuccess $ f a
-instance Control.Applicative.Applicative FormResult where
+instance Applicative FormResult where
     pure = FormSuccess
     (FormSuccess f) <*> (FormSuccess g) = FormSuccess $ f g
     (FormFailure x) <*> (FormFailure y) = FormFailure $ x ++ y
     (FormFailure x) <*> _ = FormFailure x
     _ <*> (FormFailure y) = FormFailure y
     _ <*> _ = FormMissing
-instance Data.Monoid.Monoid m => Monoid (FormResult m) where
+instance Monoid m => Monoid (FormResult m) where
     mempty = pure mempty
-    mappend x y = mappend <$> x <*> y
+    mappend = (<>)
 instance Semigroup m => Semigroup (FormResult m) where
-    x <> y = (<>) Control.Applicative.<$> x <*> y
+    x <> y = (<>) <$> x <*> y
 
 -- | @since 1.4.5
 instance Data.Foldable.Foldable FormResult where
@@ -104,9 +103,6 @@
     toValue Multipart = "multipart/form-data"
 instance Monoid Enctype where
     mempty = UrlEncoded
-#if !(MIN_VERSION_base(4,11,0))
-    mappend = (<>)
-#endif
 instance Semigroup Enctype where
     UrlEncoded <> UrlEncoded = UrlEncoded
     _          <> _          = Multipart
@@ -172,7 +168,7 @@
     (AForm f) >>= k = AForm $ \mr env ints -> do
         (a, b, ints', c) <- f mr env ints
         case a of
-          FormSuccess r -> do 
+          FormSuccess r -> do
             (x, y, ints'', z) <- unAForm (k r) mr env ints'
             return (x, b . y, ints'', c `mappend` z)
           FormFailure err -> pure (FormFailure err, b, ints', c)
@@ -180,7 +176,7 @@
 #endif
 instance (Monad m, Monoid a) => Monoid (AForm m a) where
     mempty = pure mempty
-    mappend a b = mappend <$> a <*> b
+    mappend = (<>)
 instance (Monad m, Semigroup a) => Semigroup (AForm m a) where
     a <> b = (<>) <$> a <*> b
 
diff --git a/yesod-form.cabal b/yesod-form.cabal
--- a/yesod-form.cabal
+++ b/yesod-form.cabal
@@ -1,6 +1,6 @@
 cabal-version:   >= 1.10
 name:            yesod-form
-version:         1.7.9
+version:         1.7.9.2
 license:         MIT
 license-file:    LICENSE
 author:          Michael Snoyman <michael@snoyman.com>
@@ -20,7 +20,7 @@
 
 library
     default-language: Haskell2010
-    build-depends:   base                  >= 4.10     && < 5
+    build-depends:   base                  >= 4.11     && < 5
                    , aeson
                    , attoparsec            >= 0.10
                    , blaze-builder         >= 0.2.1.4
