content: -----------------------------------------------------------------------------
  -- |
  -- Module      : Hasmin
  -- Copyright   : (c) 2017 Cristian Adrián Ontivero
  -- License     : BSD3
  -- Stability   : experimental
  -- Portability : unknown
  --
  -- Recommended module to use the library.
  --
  -----------------------------------------------------------------------------
  module Hasmin (
      -- * Using the library
      -- $use
        minifyCSS
      , minifyCSSWith
      , module Hasmin.Config
      ) where
  
  import Control.Monad.Reader (runReader)
  import Data.Attoparsec.Text (parseOnly)
  import Data.Text.Lazy.Builder (toLazyText)
  import Data.Text (Text)
  import qualified Data.Text.Lazy as TL
  
  import Hasmin.Parser.Internal
  import Hasmin.Class
  import Hasmin.Types.Stylesheet
  import Hasmin.Config
  
  -- | Minify Text, based on a 'Config'. To just use a default set of
  -- configurations (i.e. 'defaultConfig'), use 'minifyCSS'.
  minifyCSSWith :: Config -> Text -> Either String Text
  minifyCSSWith cfg t = do
      sheet <- parseOnly stylesheet t
      let rs = runReader (minifyRules sheet) cfg
      pure . TL.toStrict . toLazyText $ foldMap toBuilder rs
  
  -- | Minify 'Text' CSS, using a default set of configurations (with most
  -- minification techniques enabled). 'minifyCSS' is equivalent to
  -- @'minifyCSSWith' 'defaultConfig'@.
  minifyCSS :: Text -> Either String Text
  minifyCSS = minifyCSSWith defaultConfig
  
  -- $use
  --
  -- This section shows a basic library use case.
  --
  -- Given a style sheet, say:
  --
  -- > -- Note: We are using the OverloadedStrings extension here
  -- >
  -- > sampleSheet :: Text
  -- > sampleSheet = "body { color: #ff0000 } div { margin: 0 0 0 0 }"
  --
  -- Minify it with 'minifyCSS'. In ghci:
  --
  -- > > minifyCSS sampleSheet
  -- > Right "body{color:red}div{margin:0}"
  --
  -- To modify the minification settings, just use another 'Config', e.g.:
  --
  -- > cfg :: Config
  -- > cfg = defaultConfig { colorSettings = ColorMinOff }
  --
  -- Once more in ghci, this time using 'minifyCSSWith':
  --
  -- > > minifyCSSWith cfg sampleSheet
  -- > Right "body{color:#ff0000}div{margin:0}"
  --
  -- The output is once more minified, but this time leaving colors as they were
  -- originally.
  --
  -- For the complete list of possible options, refer to 'Config'.
  