css-parser-0.0.1: src/CssParser/At/Function.hs
{-# LANGUAGE UndecidableInstances #-}
module CssParser.At.Function where
import CssParser.Ident ( Var )
import CssParser.Rule.Type
import CssParser.Rule.Value ( PropVal, PropVals, PropValsList )
import CssParser.Prelude
import CssParser.Show
( CssShow(..), Embraced(Embraced), ShowSpaceBetween(..), Csl(Csl) )
data FunArg = FunArg
{ argName :: Var
, argType :: Maybe CssType
, defaultValue :: Maybe PropVal
}
deriving (Eq, Ord, Show, Generic)
instance CssShow FunArg where
toCssText fa =
toCssText fa.argName <>
maybe "" ((" type(" <> ) . (<> ")") . toCssText) fa.argType <>
maybe "" ((" : " <> ) . toCssText) fa.defaultValue
data ConstEntry = ConstEntry Var PropValsList deriving (Show, Eq, Ord, Generic)
instance ShowSpaceBetween ConstEntry ConstEntry where
cssSpace _ _ = ""
instance CssShow ConstEntry where
toCssText (ConstEntry pn pv) =
toCssText pn <> ": " <> toCssText pv <> ";"
data Function r
= Function
{ name :: Var
, args :: [FunArg]
, returns :: Maybe CssType
, localConsts :: [ ConstEntry ]
, result :: NonEmpty PropVals
, atRules :: [r]
} deriving (Eq, Ord, Show, Generic)
instance (ShowSpaceBetween r r, CssShow r) => CssShow (Function r) where
toCssText p =
toCssText p.name <> toCssText (Embraced (Csl p.args)) <>
maybe "" ((" returns type(" <>) . (<> ")"). toCssText) p.returns <>
"{" <> toCssText p.localConsts <> " result: " <> toCssText p.result <> ";" <>
toCssText p.atRules <> "}"