diff --git a/src/Clay/Pseudo.hs b/src/Clay/Pseudo.hs index 436c053..f302cce 100644 --- a/src/Clay/Pseudo.hs +++ b/src/Clay/Pseudo.hs @@ -1,9 +1,11 @@ {-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE TypeSynonymInstances #-} +{-# LANGUAGE FlexibleInstances #-} module Clay.Pseudo where import Data.Text (Text) -import Clay.Render (renderSelector) +import Clay.Render (renderSelector, renderRefinement) import Clay.Selector import qualified Data.Text.Lazy as Lazy @@ -64,5 +66,19 @@ nthLastChild n = func "nth-last-child" [n] nthLastOfType n = func "nth-last-of-type" [n] nthOfType n = func "nth-of-type" [n] -not :: Selector -> Refinement -not r = func "not" [Lazy.toStrict (renderSelector r)] +-- | The 'not' pseudo selector can be applied to both a 'Refinement' +-- +-- > input # not checked +-- +-- or a 'Selector' +-- +-- > not p + +class Not a where + not :: a -> Refinement + +instance Not Selector where + not r = func "not" [Lazy.toStrict (renderSelector r)] + +instance Not Refinement where + not r = func "not" (Lazy.toStrict <$> renderRefinement r) diff --git a/src/Clay/Render.hs b/src/Clay/Render.hs index d4ebeba..83d5aec 100644 --- a/src/Clay/Render.hs +++ b/src/Clay/Render.hs @@ -8,6 +8,7 @@ module Clay.Render , putCss , renderWith , renderSelector +, renderRefinement , withBanner ) where @@ -120,6 +121,11 @@ renderWith cfg top renderSelector :: Selector -> Lazy.Text renderSelector = toLazyText . selector compact +-- | Render a CSS `Refinement`. + +renderRefinement :: Refinement -> [Lazy.Text] +renderRefinement r = toLazyText . predicate <$> unFilter r + ------------------------------------------------------------------------------- renderBanner :: Config -> Lazy.Text -> Lazy.Text