{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE Rank2Types #-}
module Text.Blaze.Front.Internal
(
ChoiceString (..)
, StaticString (..)
, MarkupM (..)
, Markup
, Tag
, Attribute (..)
, AttributeValue(..)
, customParent
, customLeaf
, attribute
, dataAttribute
, customAttribute
, text
, preEscapedText
, lazyText
, preEscapedLazyText
, string
, preEscapedString
, unsafeByteString
, unsafeLazyByteString
, textTag
, stringTag
, textValue
, preEscapedTextValue
, lazyTextValue
, preEscapedLazyTextValue
, stringValue
, preEscapedStringValue
, unsafeByteStringValue
, unsafeLazyByteStringValue
, Attributable
, (!)
, (!?)
, contents
, external
, null
) where
import Control.Applicative
import qualified Data.ByteString as B
import Data.ByteString.Char8 (ByteString)
import qualified Data.ByteString.Lazy as BL
import qualified Data.List as List
import Data.Semigroup (sconcat)
import Data.Text (Text)
import qualified Data.Text as T
import qualified Data.Text.Encoding as T
import qualified Data.Text.Lazy as LT
import Data.Typeable (Typeable)
import GHC.Exts (IsString (..))
import Prelude hiding (null)
import Bridge
import Text.Blaze.Internal (ChoiceString (..), StaticString (..))
import Unsafe.Coerce (unsafeCoerce)
data MarkupM act a
= forall act'. MapActions (act' -> act) (MarkupM act' a)
| OnEvent (EventHandler act) (MarkupM act a)
| Parent StaticString StaticString StaticString (MarkupM act a)
| CustomParent ChoiceString (MarkupM act a)
| Leaf StaticString StaticString StaticString
| CustomLeaf ChoiceString Bool
| Content ChoiceString
| forall b c. Append (MarkupM act b) (MarkupM act c)
| AddAttribute StaticString StaticString ChoiceString (MarkupM act a)
| AddCustomAttribute ChoiceString ChoiceString (MarkupM act a)
| Empty
deriving (Typeable)
type Markup e = MarkupM e ()
instance Monoid a => Monoid (MarkupM ev a) where
mempty :: MarkupM ev a
mempty = MarkupM ev a
forall act a. MarkupM act a
Empty
{-# INLINE mempty #-}
instance Semigroup a => Semigroup (MarkupM ev a) where
MarkupM ev a
x <> :: MarkupM ev a -> MarkupM ev a -> MarkupM ev a
<> MarkupM ev a
y = MarkupM ev a -> MarkupM ev a -> MarkupM ev a
forall act a b c. MarkupM act b -> MarkupM act c -> MarkupM act a
Append MarkupM ev a
x MarkupM ev a
y
{-# INLINE (<>) #-}
sconcat :: NonEmpty (MarkupM ev a) -> MarkupM ev a
sconcat = (MarkupM ev a -> MarkupM ev a -> MarkupM ev a)
-> MarkupM ev a -> NonEmpty (MarkupM ev a) -> MarkupM ev a
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr MarkupM ev a -> MarkupM ev a -> MarkupM ev a
forall act a b c. MarkupM act b -> MarkupM act c -> MarkupM act a
Append MarkupM ev a
forall act a. MarkupM act a
Empty
{-# INLINE sconcat #-}
instance Functor (MarkupM ev) where
fmap :: (a -> b) -> MarkupM ev a -> MarkupM ev b
fmap a -> b
_ = MarkupM ev a -> MarkupM ev b
forall a b. a -> b
unsafeCoerce
instance Applicative (MarkupM ev) where
pure :: a -> MarkupM ev a
pure a
_ = MarkupM ev a
forall act a. MarkupM act a
Empty
MarkupM ev (a -> b)
ff <*> :: MarkupM ev (a -> b) -> MarkupM ev a -> MarkupM ev b
<*> MarkupM ev a
fx = MarkupM ev (a -> b) -> MarkupM ev a -> MarkupM ev b
forall act a b c. MarkupM act b -> MarkupM act c -> MarkupM act a
Append MarkupM ev (a -> b)
ff MarkupM ev a
fx
instance Monad (MarkupM ev) where
return :: a -> MarkupM ev a
return a
_ = MarkupM ev a
forall act a. MarkupM act a
Empty
{-# INLINE return #-}
>> :: MarkupM ev a -> MarkupM ev b -> MarkupM ev b
(>>) = MarkupM ev a -> MarkupM ev b -> MarkupM ev b
forall act a b c. MarkupM act b -> MarkupM act c -> MarkupM act a
Append
{-# INLINE (>>) #-}
MarkupM ev a
h1 >>= :: MarkupM ev a -> (a -> MarkupM ev b) -> MarkupM ev b
>>= a -> MarkupM ev b
f = MarkupM ev a
h1 MarkupM ev a -> MarkupM ev b -> MarkupM ev b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> a -> MarkupM ev b
f
([Char] -> a
forall a. HasCallStack => [Char] -> a
error [Char]
"Text.Blaze.Internal.MarkupM: invalid use of monadic bind")
{-# INLINE (>>=) #-}
instance IsString (MarkupM ev a) where
fromString :: [Char] -> MarkupM ev a
fromString = ChoiceString -> MarkupM ev a
forall act a. ChoiceString -> MarkupM act a
Content (ChoiceString -> MarkupM ev a)
-> ([Char] -> ChoiceString) -> [Char] -> MarkupM ev a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> ChoiceString
forall a. IsString a => [Char] -> a
fromString
{-# INLINE fromString #-}
newtype Tag = Tag { Tag -> StaticString
unTag :: StaticString }
deriving ([Char] -> Tag
([Char] -> Tag) -> IsString Tag
forall a. ([Char] -> a) -> IsString a
fromString :: [Char] -> Tag
$cfromString :: [Char] -> Tag
IsString)
newtype Attribute ev = Attribute (forall a. MarkupM ev a -> MarkupM ev a)
instance Monoid (Attribute ev) where
mempty :: Attribute ev
mempty = (forall a. MarkupM ev a -> MarkupM ev a) -> Attribute ev
forall ev. (forall a. MarkupM ev a -> MarkupM ev a) -> Attribute ev
Attribute forall a. a -> a
forall a. MarkupM ev a -> MarkupM ev a
id
instance Semigroup (Attribute ev) where
Attribute forall a. MarkupM ev a -> MarkupM ev a
f <> :: Attribute ev -> Attribute ev -> Attribute ev
<> Attribute forall a. MarkupM ev a -> MarkupM ev a
g = (forall a. MarkupM ev a -> MarkupM ev a) -> Attribute ev
forall ev. (forall a. MarkupM ev a -> MarkupM ev a) -> Attribute ev
Attribute (MarkupM ev a -> MarkupM ev a
forall a. MarkupM ev a -> MarkupM ev a
g (MarkupM ev a -> MarkupM ev a)
-> (MarkupM ev a -> MarkupM ev a) -> MarkupM ev a -> MarkupM ev a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MarkupM ev a -> MarkupM ev a
forall a. MarkupM ev a -> MarkupM ev a
f)
newtype AttributeValue = AttributeValue { AttributeValue -> ChoiceString
unAttributeValue :: ChoiceString }
deriving ([Char] -> AttributeValue
([Char] -> AttributeValue) -> IsString AttributeValue
forall a. ([Char] -> a) -> IsString a
fromString :: [Char] -> AttributeValue
$cfromString :: [Char] -> AttributeValue
IsString, Semigroup AttributeValue
AttributeValue
Semigroup AttributeValue
-> AttributeValue
-> (AttributeValue -> AttributeValue -> AttributeValue)
-> ([AttributeValue] -> AttributeValue)
-> Monoid AttributeValue
[AttributeValue] -> AttributeValue
AttributeValue -> AttributeValue -> AttributeValue
forall a.
Semigroup a -> a -> (a -> a -> a) -> ([a] -> a) -> Monoid a
mconcat :: [AttributeValue] -> AttributeValue
$cmconcat :: [AttributeValue] -> AttributeValue
mappend :: AttributeValue -> AttributeValue -> AttributeValue
$cmappend :: AttributeValue -> AttributeValue -> AttributeValue
mempty :: AttributeValue
$cmempty :: AttributeValue
$cp1Monoid :: Semigroup AttributeValue
Monoid, b -> AttributeValue -> AttributeValue
NonEmpty AttributeValue -> AttributeValue
AttributeValue -> AttributeValue -> AttributeValue
(AttributeValue -> AttributeValue -> AttributeValue)
-> (NonEmpty AttributeValue -> AttributeValue)
-> (forall b. Integral b => b -> AttributeValue -> AttributeValue)
-> Semigroup AttributeValue
forall b. Integral b => b -> AttributeValue -> AttributeValue
forall a.
(a -> a -> a)
-> (NonEmpty a -> a)
-> (forall b. Integral b => b -> a -> a)
-> Semigroup a
stimes :: b -> AttributeValue -> AttributeValue
$cstimes :: forall b. Integral b => b -> AttributeValue -> AttributeValue
sconcat :: NonEmpty AttributeValue -> AttributeValue
$csconcat :: NonEmpty AttributeValue -> AttributeValue
<> :: AttributeValue -> AttributeValue -> AttributeValue
$c<> :: AttributeValue -> AttributeValue -> AttributeValue
Semigroup)
customParent :: Tag
-> Markup ev
-> Markup ev
customParent :: Tag -> Markup ev -> Markup ev
customParent Tag
tag = ChoiceString -> Markup ev -> Markup ev
forall act a. ChoiceString -> MarkupM act a -> MarkupM act a
CustomParent (StaticString -> ChoiceString
Static (StaticString -> ChoiceString) -> StaticString -> ChoiceString
forall a b. (a -> b) -> a -> b
$ Tag -> StaticString
unTag Tag
tag)
customLeaf :: Tag
-> Bool
-> Markup ev
customLeaf :: Tag -> Bool -> Markup ev
customLeaf Tag
tag = ChoiceString -> Bool -> Markup ev
forall act a. ChoiceString -> Bool -> MarkupM act a
CustomLeaf (StaticString -> ChoiceString
Static (StaticString -> ChoiceString) -> StaticString -> ChoiceString
forall a b. (a -> b) -> a -> b
$ Tag -> StaticString
unTag Tag
tag)
attribute :: Tag
-> Tag
-> AttributeValue
-> Attribute ev
attribute :: Tag -> Tag -> AttributeValue -> Attribute ev
attribute Tag
rawKey Tag
key AttributeValue
value = (forall a. MarkupM ev a -> MarkupM ev a) -> Attribute ev
forall ev. (forall a. MarkupM ev a -> MarkupM ev a) -> Attribute ev
Attribute ((forall a. MarkupM ev a -> MarkupM ev a) -> Attribute ev)
-> (forall a. MarkupM ev a -> MarkupM ev a) -> Attribute ev
forall a b. (a -> b) -> a -> b
$
StaticString
-> StaticString -> ChoiceString -> MarkupM ev a -> MarkupM ev a
forall act a.
StaticString
-> StaticString -> ChoiceString -> MarkupM act a -> MarkupM act a
AddAttribute (Tag -> StaticString
unTag Tag
rawKey) (Tag -> StaticString
unTag Tag
key) (AttributeValue -> ChoiceString
unAttributeValue AttributeValue
value)
{-# INLINE attribute #-}
dataAttribute :: Tag
-> AttributeValue
-> Attribute ev
dataAttribute :: Tag -> AttributeValue -> Attribute ev
dataAttribute Tag
tag AttributeValue
value = (forall a. MarkupM ev a -> MarkupM ev a) -> Attribute ev
forall ev. (forall a. MarkupM ev a -> MarkupM ev a) -> Attribute ev
Attribute ((forall a. MarkupM ev a -> MarkupM ev a) -> Attribute ev)
-> (forall a. MarkupM ev a -> MarkupM ev a) -> Attribute ev
forall a b. (a -> b) -> a -> b
$ ChoiceString -> ChoiceString -> MarkupM ev a -> MarkupM ev a
forall act a.
ChoiceString -> ChoiceString -> MarkupM act a -> MarkupM act a
AddCustomAttribute
(StaticString -> ChoiceString
Static StaticString
"data-" ChoiceString -> ChoiceString -> ChoiceString
forall a. Monoid a => a -> a -> a
`mappend` StaticString -> ChoiceString
Static (Tag -> StaticString
unTag Tag
tag))
(AttributeValue -> ChoiceString
unAttributeValue AttributeValue
value)
{-# INLINE dataAttribute #-}
customAttribute :: Tag
-> AttributeValue
-> Attribute ev
customAttribute :: Tag -> AttributeValue -> Attribute ev
customAttribute Tag
tag AttributeValue
value = (forall a. MarkupM ev a -> MarkupM ev a) -> Attribute ev
forall ev. (forall a. MarkupM ev a -> MarkupM ev a) -> Attribute ev
Attribute ((forall a. MarkupM ev a -> MarkupM ev a) -> Attribute ev)
-> (forall a. MarkupM ev a -> MarkupM ev a) -> Attribute ev
forall a b. (a -> b) -> a -> b
$ ChoiceString -> ChoiceString -> MarkupM ev a -> MarkupM ev a
forall act a.
ChoiceString -> ChoiceString -> MarkupM act a -> MarkupM act a
AddCustomAttribute
(StaticString -> ChoiceString
Static (StaticString -> ChoiceString) -> StaticString -> ChoiceString
forall a b. (a -> b) -> a -> b
$ Tag -> StaticString
unTag Tag
tag)
(AttributeValue -> ChoiceString
unAttributeValue AttributeValue
value)
{-# INLINE customAttribute #-}
text :: Text
-> Markup ev
text :: Text -> Markup ev
text = ChoiceString -> Markup ev
forall act a. ChoiceString -> MarkupM act a
Content (ChoiceString -> Markup ev)
-> (Text -> ChoiceString) -> Text -> Markup ev
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> ChoiceString
Text
{-# INLINE text #-}
preEscapedText :: Text
-> Markup ev
preEscapedText :: Text -> Markup ev
preEscapedText = ChoiceString -> Markup ev
forall act a. ChoiceString -> MarkupM act a
Content (ChoiceString -> Markup ev)
-> (Text -> ChoiceString) -> Text -> Markup ev
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ChoiceString -> ChoiceString
PreEscaped (ChoiceString -> ChoiceString)
-> (Text -> ChoiceString) -> Text -> ChoiceString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> ChoiceString
Text
{-# INLINE preEscapedText #-}
lazyText :: LT.Text
-> Markup ev
lazyText :: Text -> Markup ev
lazyText = [Markup ev] -> Markup ev
forall a. Monoid a => [a] -> a
mconcat ([Markup ev] -> Markup ev)
-> (Text -> [Markup ev]) -> Text -> Markup ev
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Text -> Markup ev) -> [Text] -> [Markup ev]
forall a b. (a -> b) -> [a] -> [b]
map Text -> Markup ev
forall ev. Text -> Markup ev
text ([Text] -> [Markup ev]) -> (Text -> [Text]) -> Text -> [Markup ev]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> [Text]
LT.toChunks
{-# INLINE lazyText #-}
preEscapedLazyText :: LT.Text
-> Markup ev
preEscapedLazyText :: Text -> Markup ev
preEscapedLazyText = [Markup ev] -> Markup ev
forall a. Monoid a => [a] -> a
mconcat ([Markup ev] -> Markup ev)
-> (Text -> [Markup ev]) -> Text -> Markup ev
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Text -> Markup ev) -> [Text] -> [Markup ev]
forall a b. (a -> b) -> [a] -> [b]
map Text -> Markup ev
forall ev. Text -> Markup ev
preEscapedText ([Text] -> [Markup ev]) -> (Text -> [Text]) -> Text -> [Markup ev]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> [Text]
LT.toChunks
string :: String
-> Markup ev
string :: [Char] -> Markup ev
string = ChoiceString -> Markup ev
forall act a. ChoiceString -> MarkupM act a
Content (ChoiceString -> Markup ev)
-> ([Char] -> ChoiceString) -> [Char] -> Markup ev
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> ChoiceString
String
{-# INLINE string #-}
preEscapedString :: String
-> Markup ev
preEscapedString :: [Char] -> Markup ev
preEscapedString = ChoiceString -> Markup ev
forall act a. ChoiceString -> MarkupM act a
Content (ChoiceString -> Markup ev)
-> ([Char] -> ChoiceString) -> [Char] -> Markup ev
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ChoiceString -> ChoiceString
PreEscaped (ChoiceString -> ChoiceString)
-> ([Char] -> ChoiceString) -> [Char] -> ChoiceString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> ChoiceString
String
{-# INLINE preEscapedString #-}
unsafeByteString :: ByteString
-> Markup ev
unsafeByteString :: ByteString -> Markup ev
unsafeByteString = ChoiceString -> Markup ev
forall act a. ChoiceString -> MarkupM act a
Content (ChoiceString -> Markup ev)
-> (ByteString -> ChoiceString) -> ByteString -> Markup ev
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> ChoiceString
ByteString
{-# INLINE unsafeByteString #-}
unsafeLazyByteString :: BL.ByteString
-> Markup ev
unsafeLazyByteString :: ByteString -> Markup ev
unsafeLazyByteString = [Markup ev] -> Markup ev
forall a. Monoid a => [a] -> a
mconcat ([Markup ev] -> Markup ev)
-> (ByteString -> [Markup ev]) -> ByteString -> Markup ev
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ByteString -> Markup ev) -> [ByteString] -> [Markup ev]
forall a b. (a -> b) -> [a] -> [b]
map ByteString -> Markup ev
forall ev. ByteString -> Markup ev
unsafeByteString ([ByteString] -> [Markup ev])
-> (ByteString -> [ByteString]) -> ByteString -> [Markup ev]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> [ByteString]
BL.toChunks
{-# INLINE unsafeLazyByteString #-}
textTag :: Text
-> Tag
textTag :: Text -> Tag
textTag Text
t = StaticString -> Tag
Tag (StaticString -> Tag) -> StaticString -> Tag
forall a b. (a -> b) -> a -> b
$ ([Char] -> [Char]) -> ByteString -> Text -> StaticString
StaticString (Text -> [Char]
T.unpack Text
t [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++) (Text -> ByteString
T.encodeUtf8 Text
t) Text
t
stringTag :: String
-> Tag
stringTag :: [Char] -> Tag
stringTag = StaticString -> Tag
Tag (StaticString -> Tag) -> ([Char] -> StaticString) -> [Char] -> Tag
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> StaticString
forall a. IsString a => [Char] -> a
fromString
textValue :: Text
-> AttributeValue
textValue :: Text -> AttributeValue
textValue = ChoiceString -> AttributeValue
AttributeValue (ChoiceString -> AttributeValue)
-> (Text -> ChoiceString) -> Text -> AttributeValue
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> ChoiceString
Text
{-# INLINE textValue #-}
preEscapedTextValue :: Text
-> AttributeValue
preEscapedTextValue :: Text -> AttributeValue
preEscapedTextValue = ChoiceString -> AttributeValue
AttributeValue (ChoiceString -> AttributeValue)
-> (Text -> ChoiceString) -> Text -> AttributeValue
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ChoiceString -> ChoiceString
PreEscaped (ChoiceString -> ChoiceString)
-> (Text -> ChoiceString) -> Text -> ChoiceString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> ChoiceString
Text
{-# INLINE preEscapedTextValue #-}
lazyTextValue :: LT.Text
-> AttributeValue
lazyTextValue :: Text -> AttributeValue
lazyTextValue = [AttributeValue] -> AttributeValue
forall a. Monoid a => [a] -> a
mconcat ([AttributeValue] -> AttributeValue)
-> (Text -> [AttributeValue]) -> Text -> AttributeValue
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Text -> AttributeValue) -> [Text] -> [AttributeValue]
forall a b. (a -> b) -> [a] -> [b]
map Text -> AttributeValue
textValue ([Text] -> [AttributeValue])
-> (Text -> [Text]) -> Text -> [AttributeValue]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> [Text]
LT.toChunks
{-# INLINE lazyTextValue #-}
preEscapedLazyTextValue :: LT.Text
-> AttributeValue
preEscapedLazyTextValue :: Text -> AttributeValue
preEscapedLazyTextValue = [AttributeValue] -> AttributeValue
forall a. Monoid a => [a] -> a
mconcat ([AttributeValue] -> AttributeValue)
-> (Text -> [AttributeValue]) -> Text -> AttributeValue
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Text -> AttributeValue) -> [Text] -> [AttributeValue]
forall a b. (a -> b) -> [a] -> [b]
map Text -> AttributeValue
preEscapedTextValue ([Text] -> [AttributeValue])
-> (Text -> [Text]) -> Text -> [AttributeValue]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> [Text]
LT.toChunks
{-# INLINE preEscapedLazyTextValue #-}
stringValue :: String -> AttributeValue
stringValue :: [Char] -> AttributeValue
stringValue = ChoiceString -> AttributeValue
AttributeValue (ChoiceString -> AttributeValue)
-> ([Char] -> ChoiceString) -> [Char] -> AttributeValue
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> ChoiceString
String
{-# INLINE stringValue #-}
preEscapedStringValue :: String -> AttributeValue
preEscapedStringValue :: [Char] -> AttributeValue
preEscapedStringValue = ChoiceString -> AttributeValue
AttributeValue (ChoiceString -> AttributeValue)
-> ([Char] -> ChoiceString) -> [Char] -> AttributeValue
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ChoiceString -> ChoiceString
PreEscaped (ChoiceString -> ChoiceString)
-> ([Char] -> ChoiceString) -> [Char] -> ChoiceString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> ChoiceString
String
{-# INLINE preEscapedStringValue #-}
unsafeByteStringValue :: ByteString
-> AttributeValue
unsafeByteStringValue :: ByteString -> AttributeValue
unsafeByteStringValue = ChoiceString -> AttributeValue
AttributeValue (ChoiceString -> AttributeValue)
-> (ByteString -> ChoiceString) -> ByteString -> AttributeValue
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> ChoiceString
ByteString
{-# INLINE unsafeByteStringValue #-}
unsafeLazyByteStringValue :: BL.ByteString
-> AttributeValue
unsafeLazyByteStringValue :: ByteString -> AttributeValue
unsafeLazyByteStringValue = [AttributeValue] -> AttributeValue
forall a. Monoid a => [a] -> a
mconcat ([AttributeValue] -> AttributeValue)
-> (ByteString -> [AttributeValue]) -> ByteString -> AttributeValue
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ByteString -> AttributeValue) -> [ByteString] -> [AttributeValue]
forall a b. (a -> b) -> [a] -> [b]
map ByteString -> AttributeValue
unsafeByteStringValue ([ByteString] -> [AttributeValue])
-> (ByteString -> [ByteString]) -> ByteString -> [AttributeValue]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> [ByteString]
BL.toChunks
{-# INLINE unsafeLazyByteStringValue #-}
class Attributable h ev | h -> ev where
(!) :: h -> Attribute ev -> h
instance Attributable (MarkupM ev a) ev where
MarkupM ev a
h ! :: MarkupM ev a -> Attribute ev -> MarkupM ev a
! (Attribute forall a. MarkupM ev a -> MarkupM ev a
f) = MarkupM ev a -> MarkupM ev a
forall a. MarkupM ev a -> MarkupM ev a
f MarkupM ev a
h
{-# INLINE (!) #-}
instance Attributable (MarkupM ev a -> MarkupM ev b) ev where
MarkupM ev a -> MarkupM ev b
h ! :: (MarkupM ev a -> MarkupM ev b)
-> Attribute ev -> MarkupM ev a -> MarkupM ev b
! Attribute ev
f = (MarkupM ev b -> Attribute ev -> MarkupM ev b
forall h ev. Attributable h ev => h -> Attribute ev -> h
! Attribute ev
f) (MarkupM ev b -> MarkupM ev b)
-> (MarkupM ev a -> MarkupM ev b) -> MarkupM ev a -> MarkupM ev b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MarkupM ev a -> MarkupM ev b
h
{-# INLINE (!) #-}
(!?) :: Attributable h ev => h -> (Bool, Attribute ev) -> h
!? :: h -> (Bool, Attribute ev) -> h
(!?) h
h (Bool
c, Attribute ev
a) = if Bool
c then h
h h -> Attribute ev -> h
forall h ev. Attributable h ev => h -> Attribute ev -> h
! Attribute ev
a else h
h
external :: MarkupM ev a -> MarkupM ev a
external :: MarkupM ev a -> MarkupM ev a
external (MapActions act' -> ev
f MarkupM act' a
x) = (act' -> ev) -> MarkupM act' a -> MarkupM ev a
forall act a act'. (act' -> act) -> MarkupM act' a -> MarkupM act a
MapActions act' -> ev
f (MarkupM act' a -> MarkupM act' a
forall ev a. MarkupM ev a -> MarkupM ev a
external MarkupM act' a
x)
external (OnEvent EventHandler ev
ev MarkupM ev a
x) = EventHandler ev -> MarkupM ev a -> MarkupM ev a
forall act a. EventHandler act -> MarkupM act a -> MarkupM act a
OnEvent EventHandler ev
ev (MarkupM ev a -> MarkupM ev a
forall ev a. MarkupM ev a -> MarkupM ev a
external MarkupM ev a
x)
external (Content ChoiceString
x) = ChoiceString -> MarkupM ev a
forall act a. ChoiceString -> MarkupM act a
Content (ChoiceString -> MarkupM ev a) -> ChoiceString -> MarkupM ev a
forall a b. (a -> b) -> a -> b
$ ChoiceString -> ChoiceString
External ChoiceString
x
external (Append MarkupM ev b
x MarkupM ev c
y) = MarkupM ev b -> MarkupM ev c -> MarkupM ev a
forall act a b c. MarkupM act b -> MarkupM act c -> MarkupM act a
Append (MarkupM ev b -> MarkupM ev b
forall ev a. MarkupM ev a -> MarkupM ev a
external MarkupM ev b
x) (MarkupM ev c -> MarkupM ev c
forall ev a. MarkupM ev a -> MarkupM ev a
external MarkupM ev c
y)
external (Parent StaticString
x StaticString
y StaticString
z MarkupM ev a
i) = StaticString
-> StaticString -> StaticString -> MarkupM ev a -> MarkupM ev a
forall act a.
StaticString
-> StaticString -> StaticString -> MarkupM act a -> MarkupM act a
Parent StaticString
x StaticString
y StaticString
z (MarkupM ev a -> MarkupM ev a) -> MarkupM ev a -> MarkupM ev a
forall a b. (a -> b) -> a -> b
$ MarkupM ev a -> MarkupM ev a
forall ev a. MarkupM ev a -> MarkupM ev a
external MarkupM ev a
i
external (CustomParent ChoiceString
x MarkupM ev a
i) = ChoiceString -> MarkupM ev a -> MarkupM ev a
forall act a. ChoiceString -> MarkupM act a -> MarkupM act a
CustomParent ChoiceString
x (MarkupM ev a -> MarkupM ev a) -> MarkupM ev a -> MarkupM ev a
forall a b. (a -> b) -> a -> b
$ MarkupM ev a -> MarkupM ev a
forall ev a. MarkupM ev a -> MarkupM ev a
external MarkupM ev a
i
external (AddAttribute StaticString
x StaticString
y ChoiceString
z MarkupM ev a
i) = StaticString
-> StaticString -> ChoiceString -> MarkupM ev a -> MarkupM ev a
forall act a.
StaticString
-> StaticString -> ChoiceString -> MarkupM act a -> MarkupM act a
AddAttribute StaticString
x StaticString
y ChoiceString
z (MarkupM ev a -> MarkupM ev a) -> MarkupM ev a -> MarkupM ev a
forall a b. (a -> b) -> a -> b
$ MarkupM ev a -> MarkupM ev a
forall ev a. MarkupM ev a -> MarkupM ev a
external MarkupM ev a
i
external (AddCustomAttribute ChoiceString
x ChoiceString
y MarkupM ev a
i) = ChoiceString -> ChoiceString -> MarkupM ev a -> MarkupM ev a
forall act a.
ChoiceString -> ChoiceString -> MarkupM act a -> MarkupM act a
AddCustomAttribute ChoiceString
x ChoiceString
y (MarkupM ev a -> MarkupM ev a) -> MarkupM ev a -> MarkupM ev a
forall a b. (a -> b) -> a -> b
$ MarkupM ev a -> MarkupM ev a
forall ev a. MarkupM ev a -> MarkupM ev a
external MarkupM ev a
i
external MarkupM ev a
x = MarkupM ev a
x
{-# INLINABLE external #-}
contents :: MarkupM ev a -> MarkupM ev' b
contents :: MarkupM ev a -> MarkupM ev' b
contents (MapActions act' -> ev
_ MarkupM act' a
c) = MarkupM act' a -> MarkupM ev' b
forall ev a ev' b. MarkupM ev a -> MarkupM ev' b
contents MarkupM act' a
c
contents (OnEvent EventHandler ev
_ MarkupM ev a
c) = MarkupM ev a -> MarkupM ev' b
forall ev a ev' b. MarkupM ev a -> MarkupM ev' b
contents MarkupM ev a
c
contents (Parent StaticString
_ StaticString
_ StaticString
_ MarkupM ev a
c) = MarkupM ev a -> MarkupM ev' b
forall ev a ev' b. MarkupM ev a -> MarkupM ev' b
contents MarkupM ev a
c
contents (CustomParent ChoiceString
_ MarkupM ev a
c) = MarkupM ev a -> MarkupM ev' b
forall ev a ev' b. MarkupM ev a -> MarkupM ev' b
contents MarkupM ev a
c
contents (Content ChoiceString
c) = ChoiceString -> MarkupM ev' b
forall act a. ChoiceString -> MarkupM act a
Content ChoiceString
c
contents (Append MarkupM ev b
c1 MarkupM ev c
c2) = MarkupM ev' Any -> MarkupM ev' Any -> MarkupM ev' b
forall act a b c. MarkupM act b -> MarkupM act c -> MarkupM act a
Append (MarkupM ev b -> MarkupM ev' Any
forall ev a ev' b. MarkupM ev a -> MarkupM ev' b
contents MarkupM ev b
c1) (MarkupM ev c -> MarkupM ev' Any
forall ev a ev' b. MarkupM ev a -> MarkupM ev' b
contents MarkupM ev c
c2)
contents (AddAttribute StaticString
_ StaticString
_ ChoiceString
_ MarkupM ev a
c) = MarkupM ev a -> MarkupM ev' b
forall ev a ev' b. MarkupM ev a -> MarkupM ev' b
contents MarkupM ev a
c
contents (AddCustomAttribute ChoiceString
_ ChoiceString
_ MarkupM ev a
c) = MarkupM ev a -> MarkupM ev' b
forall ev a ev' b. MarkupM ev a -> MarkupM ev' b
contents MarkupM ev a
c
contents MarkupM ev a
_ = MarkupM ev' b
forall act a. MarkupM act a
Empty
null :: MarkupM ev a -> Bool
null :: MarkupM ev a -> Bool
null MarkupM ev a
markup = case MarkupM ev a
markup of
MapActions act' -> ev
_ MarkupM act' a
c -> MarkupM act' a -> Bool
forall ev a. MarkupM ev a -> Bool
null MarkupM act' a
c
OnEvent EventHandler ev
_ MarkupM ev a
c -> MarkupM ev a -> Bool
forall ev a. MarkupM ev a -> Bool
null MarkupM ev a
c
Parent StaticString
_ StaticString
_ StaticString
_ MarkupM ev a
_ -> Bool
False
CustomParent ChoiceString
_ MarkupM ev a
_ -> Bool
False
Leaf StaticString
_ StaticString
_ StaticString
_ -> Bool
False
CustomLeaf ChoiceString
_ Bool
_ -> Bool
False
Content ChoiceString
c -> ChoiceString -> Bool
emptyChoiceString ChoiceString
c
Append MarkupM ev b
c1 MarkupM ev c
c2 -> MarkupM ev b -> Bool
forall ev a. MarkupM ev a -> Bool
null MarkupM ev b
c1 Bool -> Bool -> Bool
&& MarkupM ev c -> Bool
forall ev a. MarkupM ev a -> Bool
null MarkupM ev c
c2
AddAttribute StaticString
_ StaticString
_ ChoiceString
_ MarkupM ev a
c -> MarkupM ev a -> Bool
forall ev a. MarkupM ev a -> Bool
null MarkupM ev a
c
AddCustomAttribute ChoiceString
_ ChoiceString
_ MarkupM ev a
c -> MarkupM ev a -> Bool
forall ev a. MarkupM ev a -> Bool
null MarkupM ev a
c
MarkupM ev a
Empty -> Bool
True
where
emptyChoiceString :: ChoiceString -> Bool
emptyChoiceString ChoiceString
cs = case ChoiceString
cs of
Static StaticString
ss -> StaticString -> Bool
emptyStaticString StaticString
ss
String [Char]
s -> [Char] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
List.null [Char]
s
Text Text
t -> Text -> Bool
T.null Text
t
ByteString ByteString
bs -> ByteString -> Bool
B.null ByteString
bs
PreEscaped ChoiceString
c -> ChoiceString -> Bool
emptyChoiceString ChoiceString
c
External ChoiceString
c -> ChoiceString -> Bool
emptyChoiceString ChoiceString
c
AppendChoiceString ChoiceString
c1 ChoiceString
c2 -> ChoiceString -> Bool
emptyChoiceString ChoiceString
c1 Bool -> Bool -> Bool
&& ChoiceString -> Bool
emptyChoiceString ChoiceString
c2
ChoiceString
EmptyChoiceString -> Bool
True
emptyStaticString :: StaticString -> Bool
emptyStaticString = ByteString -> Bool
B.null (ByteString -> Bool)
-> (StaticString -> ByteString) -> StaticString -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. StaticString -> ByteString
getUtf8ByteString