-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | representations of a web pag -- -- See readme.md for verbage (if any) @package web-rep @version 0.1.2 module Web.Page.Css fill :: Color -> Css stroke :: Color -> Css strokeWidth :: Size Position -> Css crispEdges :: ShapeRendering optimizeSpeed :: ShapeRendering geometricPrecision :: ShapeRendering shapeRendering :: ShapeRendering -> Css -- | The Css context is used to collect style rules which are -- mappings from selectors to style properties. The Css type is a -- computation in the StyleM monad that just collects and doesn't -- return anything. type Css = StyleM () -- | Render a stylesheet with the default configuration. The pretty printer -- is used by default. render :: Css -> Text -- | Render a stylesheet with a custom configuration and an optional outer -- scope. renderWith :: Config -> [App] -> Css -> Text -- | Configuration to print to a compacted unreadable CSS output. compact :: Config data PageCss PageCss :: Css -> PageCss PageCssText :: Text -> PageCss instance Clay.Property.Val Web.Page.Css.ShapeRendering instance Clay.Common.Auto Web.Page.Css.ShapeRendering instance Clay.Common.Inherit Web.Page.Css.ShapeRendering instance GHC.Generics.Generic Web.Page.Css.PageCss instance GHC.Show.Show Web.Page.Css.PageCss instance GHC.Classes.Eq Web.Page.Css.PageCss instance GHC.Base.Semigroup Web.Page.Css.PageCss instance GHC.Base.Monoid Web.Page.Css.PageCss instance GHC.Show.Show Clay.Stylesheet.Css instance GHC.Classes.Eq Clay.Stylesheet.Css module Web.Page.Html class__ :: Text -> Attribute toText :: Html a -> Text -- | name supply for html elements genName :: MonadState Int m => m Text -- | sometimes a number doesn't work properly in html (or js???), and an -- alpha prefix seems to help genNamePre :: MonadState Int m => Text -> m Text libCss :: Text -> Html () libJs :: Text -> Html () fromHex :: Parser PixelRGB8 toHex :: PixelRGB8 -> Text -- | Simple HTML builder type. Defined in terms of HtmlT. Check out -- that type for instance information. -- -- Simple use-cases will just use this type. But if you want to -- transformer over Reader or something, you can go and use HtmlT. type Html = HtmlT Identity instance Lucid.Base.ToHtml GHC.Types.Double instance Lucid.Base.ToHtml GHC.Types.Bool instance Lucid.Base.ToHtml GHC.Types.Int instance Lucid.Base.ToHtml Codec.Picture.Types.PixelRGB8 instance Lucid.Base.ToHtml () module Web.Page.Html.Input -- | something that might exist on a web page and be a front-end input to -- computations. data Input a Input :: a -> Maybe Text -> Text -> InputType -> Input a -- | various types of Inputs, that encapsulate practical bootstrap class -- functionality data InputType Slider :: [Attribute] -> InputType TextBox :: InputType TextArea :: Int -> InputType ColorPicker :: InputType ChooseFile :: InputType Dropdown :: [Text] -> InputType DropdownSum :: [Text] -> InputType Datalist :: [Text] -> Text -> InputType Checkbox :: Bool -> InputType Toggle :: Bool -> Maybe Text -> InputType Button :: InputType scriptToggleShow :: Monad m => Text -> Text -> HtmlT m () instance GHC.Generics.Generic (Web.Page.Html.Input.Input a) instance GHC.Show.Show a => GHC.Show.Show (Web.Page.Html.Input.Input a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Web.Page.Html.Input.Input a) instance GHC.Generics.Generic Web.Page.Html.Input.InputType instance GHC.Show.Show Web.Page.Html.Input.InputType instance GHC.Classes.Eq Web.Page.Html.Input.InputType instance Lucid.Base.ToHtml a => Lucid.Base.ToHtml (Web.Page.Html.Input.Input a) module Web.Page.Js newtype JS JS :: JSAST -> JS [unJS] :: JS -> JSAST data JSStatement -- | lbrace, stmts, rbrace, autosemi JSStatementBlock :: !JSAnnot -> ![JSStatement] -> !JSAnnot -> !JSSemi -> JSStatement -- | break,optional identifier, autosemi JSBreak :: !JSAnnot -> !JSIdent -> !JSSemi -> JSStatement -- | const, decl, autosemi JSLet :: !JSAnnot -> !JSCommaList JSExpression -> !JSSemi -> JSStatement -- | class, name, optional extends clause, lb, body, rb, autosemi JSClass :: !JSAnnot -> !JSIdent -> !JSClassHeritage -> !JSAnnot -> ![JSClassElement] -> !JSAnnot -> !JSSemi -> JSStatement -- | const, decl, autosemi JSConstant :: !JSAnnot -> !JSCommaList JSExpression -> !JSSemi -> JSStatement -- | continue, optional identifier,autosemi JSContinue :: !JSAnnot -> !JSIdent -> !JSSemi -> JSStatement -- | do,stmt,while,lb,expr,rb,autosemi JSDoWhile :: !JSAnnot -> !JSStatement -> !JSAnnot -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSSemi -> JSStatement -- | for,lb,expr,semi,expr,semi,expr,rb.stmt JSFor :: !JSAnnot -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSStatement -> JSStatement -- | for,lb,expr,in,expr,rb,stmt JSForIn :: !JSAnnot -> !JSAnnot -> !JSExpression -> !JSBinOp -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement -- | for,lb,var,vardecl,semi,expr,semi,expr,rb,stmt JSForVar :: !JSAnnot -> !JSAnnot -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSStatement -> JSStatement -- | for,lb,var,vardecl,in,expr,rb,stmt JSForVarIn :: !JSAnnot -> !JSAnnot -> !JSAnnot -> !JSExpression -> !JSBinOp -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement -- | for,lb,var,vardecl,semi,expr,semi,expr,rb,stmt JSForLet :: !JSAnnot -> !JSAnnot -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSStatement -> JSStatement -- | for,lb,var,vardecl,in,expr,rb,stmt JSForLetIn :: !JSAnnot -> !JSAnnot -> !JSAnnot -> !JSExpression -> !JSBinOp -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement -- | for,lb,var,vardecl,in,expr,rb,stmt JSForLetOf :: !JSAnnot -> !JSAnnot -> !JSAnnot -> !JSExpression -> !JSBinOp -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement -- | for,lb,var,vardecl,semi,expr,semi,expr,rb,stmt JSForConst :: !JSAnnot -> !JSAnnot -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSStatement -> JSStatement -- | for,lb,var,vardecl,in,expr,rb,stmt JSForConstIn :: !JSAnnot -> !JSAnnot -> !JSAnnot -> !JSExpression -> !JSBinOp -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement -- | for,lb,var,vardecl,in,expr,rb,stmt JSForConstOf :: !JSAnnot -> !JSAnnot -> !JSAnnot -> !JSExpression -> !JSBinOp -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement -- | for,lb,expr,in,expr,rb,stmt JSForOf :: !JSAnnot -> !JSAnnot -> !JSExpression -> !JSBinOp -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement -- | for,lb,var,vardecl,in,expr,rb,stmt JSForVarOf :: !JSAnnot -> !JSAnnot -> !JSAnnot -> !JSExpression -> !JSBinOp -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement -- | fn,name, lb,parameter list,rb,block,autosemi JSFunction :: !JSAnnot -> !JSIdent -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSBlock -> !JSSemi -> JSStatement -- | fn,*,name, lb,parameter list,rb,block,autosemi JSGenerator :: !JSAnnot -> !JSAnnot -> !JSIdent -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSBlock -> !JSSemi -> JSStatement -- | if,(,expr,),stmt JSIf :: !JSAnnot -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement -- | if,(,expr,),stmt,else,rest JSIfElse :: !JSAnnot -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSStatement -> !JSAnnot -> !JSStatement -> JSStatement -- | identifier,colon,stmt JSLabelled :: !JSIdent -> !JSAnnot -> !JSStatement -> JSStatement JSEmptyStatement :: !JSAnnot -> JSStatement JSExpressionStatement :: !JSExpression -> !JSSemi -> JSStatement -- | lhs, assignop, rhs, autosemi JSAssignStatement :: !JSExpression -> !JSAssignOp -> !JSExpression -> !JSSemi -> JSStatement JSMethodCall :: !JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSSemi -> JSStatement -- | optional expression,autosemi JSReturn :: !JSAnnot -> !Maybe JSExpression -> !JSSemi -> JSStatement -- | switch,lb,expr,rb,caseblock,autosemi JSSwitch :: !JSAnnot -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSAnnot -> ![JSSwitchParts] -> !JSAnnot -> !JSSemi -> JSStatement -- | throw val autosemi JSThrow :: !JSAnnot -> !JSExpression -> !JSSemi -> JSStatement -- | try,block,catches,finally JSTry :: !JSAnnot -> !JSBlock -> ![JSTryCatch] -> !JSTryFinally -> JSStatement -- | var, decl, autosemi JSVariable :: !JSAnnot -> !JSCommaList JSExpression -> !JSSemi -> JSStatement -- | while,lb,expr,rb,stmt JSWhile :: !JSAnnot -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement -- | with,lb,expr,rb,stmt list JSWith :: !JSAnnot -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSStatement -> !JSSemi -> JSStatement data PageJs PageJs :: JS -> PageJs PageJsText :: Text -> PageJs minifyJS :: JSAST -> JSAST onLoad :: PageJs -> PageJs -- | standard window loader onLoadStatements :: [JSStatement] -> JS toStatements :: JS -> [JSStatement] toStatement :: JS -> JSStatement renderToStatement :: Text -> JSStatement renderToText :: JSAST -> Text readJs :: String -> JSAST fromText :: Text -> JS instance GHC.Generics.Generic Web.Page.Js.PageJs instance GHC.Show.Show Web.Page.Js.PageJs instance GHC.Classes.Eq Web.Page.Js.PageJs instance GHC.Generics.Generic Web.Page.Js.JS instance GHC.Classes.Eq Web.Page.Js.JS instance GHC.Show.Show Web.Page.Js.JS instance GHC.Base.Semigroup Web.Page.Js.PageJs instance GHC.Base.Monoid Web.Page.Js.PageJs instance GHC.Base.Semigroup Web.Page.Js.JS instance GHC.Base.Monoid Web.Page.Js.JS module Web.Page.Types data Page Page :: [Html ()] -> [Html ()] -> PageCss -> PageJs -> PageJs -> Html () -> Html () -> Page data PageText PageText :: [Text] -> [Text] -> Text -> Text -> Text -> Text -> Text -> PageText data PageConfig PageConfig :: PageConcerns -> PageStructure -> PageRender -> Concerns FilePath -> [FilePath] -> PageConfig defaultPageConfig :: PageConfig data Concern Css :: Concern Js :: Concern Html :: Concern data Concerns a Concerns :: a -> a -> a -> Concerns a suffixes :: Concerns FilePath concernNames :: FilePath -> FilePath -> Concerns FilePath data PageConcerns Inline :: PageConcerns Separated :: PageConcerns data PageStructure HeaderBody :: PageStructure Headless :: PageStructure Snippet :: PageStructure Svg :: PageStructure data PageRender Pretty :: PageRender Minified :: PageRender instance GHC.Generics.Generic Web.Page.Types.PageConfig instance GHC.Classes.Eq Web.Page.Types.PageConfig instance GHC.Show.Show Web.Page.Types.PageConfig instance GHC.Generics.Generic Web.Page.Types.PageRender instance GHC.Classes.Eq Web.Page.Types.PageRender instance GHC.Show.Show Web.Page.Types.PageRender instance GHC.Generics.Generic Web.Page.Types.PageStructure instance GHC.Classes.Eq Web.Page.Types.PageStructure instance GHC.Show.Show Web.Page.Types.PageStructure instance GHC.Generics.Generic Web.Page.Types.PageConcerns instance GHC.Classes.Eq Web.Page.Types.PageConcerns instance GHC.Show.Show Web.Page.Types.PageConcerns instance GHC.Generics.Generic (Web.Page.Types.Concerns a) instance Data.Traversable.Traversable Web.Page.Types.Concerns instance Data.Foldable.Foldable Web.Page.Types.Concerns instance GHC.Show.Show a => GHC.Show.Show (Web.Page.Types.Concerns a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Web.Page.Types.Concerns a) instance GHC.Generics.Generic Web.Page.Types.Concern instance GHC.Classes.Eq Web.Page.Types.Concern instance GHC.Show.Show Web.Page.Types.Concern instance GHC.Generics.Generic Web.Page.Types.PageText instance GHC.Show.Show Web.Page.Types.PageText instance GHC.Generics.Generic Web.Page.Types.Page instance GHC.Show.Show Web.Page.Types.Page instance GHC.Base.Functor Web.Page.Types.Concerns instance GHC.Base.Applicative Web.Page.Types.Concerns instance GHC.Base.Semigroup Web.Page.Types.Page instance GHC.Base.Monoid Web.Page.Types.Page module Web.Page.Render renderPage :: Page -> Html () renderPageWith :: PageConfig -> Page -> (Text, Text, Html ()) renderPageHtmlWith :: PageConfig -> Page -> Html () renderPageAsText :: PageConfig -> Page -> Concerns Text renderPageToFile :: FilePath -> PageConfig -> Page -> IO () renderPageHtmlToFile :: FilePath -> PageConfig -> Page -> IO () renderPageTextWith :: PageConfig -> PageText -> (Text, Text, Html ()) module Web.Page.Server servePageWith :: RoutePattern -> PageConfig -> Page -> ScottyM () module Web.Page.Bootstrap bootstrapPage :: Page -- | wrap some Html with the bootstrap card class cardify :: (Html (), [Attribute]) -> Maybe Text -> (Html (), [Attribute]) -> Html () -- | wrap some html with a classed div b_ :: Text -> Html () -> Html () -- | create a bootstrapped accordian class accordion :: (MonadState Int m, Monad m) => Text -> Maybe Text -> [(Text, Html ())] -> m (Html ()) -- | create a bootstrapped accordian class accordionChecked :: (MonadState Int m, Monad m) => Text -> [(Text, Html (), Html ())] -> m (Html ()) accordionCardChecked :: Bool -> Text -> Text -> Text -> Text -> Html () -> Html () -> Html () accordion_ :: Text -> Maybe Text -> [(Text, Html ())] -> Html () module Web.Page.Rep -- | Abstracted message event elements data Element Element :: Text -> Text -> Element [element] :: Element -> Text [value] :: Element -> Text data RepF r a Rep :: r -> (HashMap Text Text -> (HashMap Text Text, Either Text a)) -> RepF r a [rep] :: RepF r a -> r [make] :: RepF r a -> HashMap Text Text -> (HashMap Text Text, Either Text a) type Rep a = RepF (Html ()) a oneRep :: (Monad m, MonadIO m) => Rep a -> (Rep a -> HashMap Text Text -> m ()) -> StateT (HashMap Text Text) m (HashMap Text Text, Either Text a) newtype SharedRepF m r a SharedRep :: StateT (Int, HashMap Text Text) m (RepF r a) -> SharedRepF m r a [unrep] :: SharedRepF m r a -> StateT (Int, HashMap Text Text) m (RepF r a) type SharedRep m a = SharedRepF m (Html ()) a runOnce :: Monad m => SharedRep m a -> (Html () -> HashMap Text Text -> m ()) -> m (HashMap Text Text, Either Text a) zeroState :: Monad m => SharedRep m a -> m (Html (), (HashMap Text Text, Either Text a)) listify :: Monad m => (Text -> a -> SharedRep m a) -> [Text] -> [a] -> SharedRep m [a] accordionListify :: Monad m => Maybe Text -> Text -> Maybe Text -> (Text -> a -> SharedRep m a) -> [Text] -> [a] -> SharedRep m [a] accordionListifyMaybe :: Monad m => Maybe Text -> Text -> (a -> SharedRep m a) -> (Bool -> SharedRep m Bool) -> [Text] -> [(Bool, a)] -> SharedRep m [(Bool, a)] listifyDefault :: Monad m => Maybe Text -> Text -> (Text -> a -> SharedRep m a) -> [a] -> SharedRep m [a] listifyMaybe :: Monad m => Maybe Text -> Text -> (Text -> Maybe a -> SharedRep m (Maybe a)) -> Int -> [a] -> SharedRep m [Maybe a] listifyMaybe' :: Monad m => Maybe Text -> Text -> (Bool -> SharedRep m Bool) -> (a -> SharedRep m a) -> Int -> a -> [a] -> SharedRep m [a] defaultListifyLabels :: Int -> [Text] valueModel :: (FromJSON a, MonadState s m) => (a -> s -> s) -> Stream (Of Value) m () -> Stream (Of (Either Text s)) m () -- | consume an Element using a Committer and a Value continuation valueConsume :: s -> (Element -> s -> s) -> Cont IO (Committer IO (Either Text s)) -> Cont_ IO Value -> IO s sharedModel :: (FromJSON a, MonadState s m) => (s -> (s, Either Text b)) -> (a -> s -> s) -> Stream (Of Value) m () -> Stream (Of (Either Text (s, Either Text b))) m () sharedConsume :: (s -> (s, Either Text b)) -> s -> (Element -> s -> s) -> Cont IO (Committer IO (Either Text (s, Either Text b))) -> Cont_ IO Value -> IO s runList :: Monad m => SharedRep m a -> [Value] -> m [Either Text (HashMap Text Text, Either Text a)] runOnEvent :: SharedRep IO a -> (Rep a -> StateT (Int, HashMap Text Text) IO ()) -> (Either Text (HashMap Text Text, Either Text a) -> IO ()) -> Cont_ IO Value -> IO (HashMap Text Text) instance GHC.Base.Functor m => GHC.Base.Functor (Web.Page.Rep.SharedRepF m r) instance GHC.Base.Functor (Web.Page.Rep.RepF r) instance GHC.Generics.Generic Web.Page.Rep.Element instance GHC.Show.Show Web.Page.Rep.Element instance GHC.Classes.Eq Web.Page.Rep.Element instance GHC.Base.Functor m => Data.Bifunctor.Bifunctor (Web.Page.Rep.SharedRepF m) instance GHC.Base.Monad m => Data.Biapplicative.Biapplicative (Web.Page.Rep.SharedRepF m) instance (GHC.Base.Monad m, GHC.Base.Monoid r) => GHC.Base.Applicative (Web.Page.Rep.SharedRepF m r) instance GHC.Base.Semigroup r => GHC.Base.Semigroup (Web.Page.Rep.RepF r a) instance (GHC.Base.Monoid a, GHC.Base.Monoid r) => GHC.Base.Monoid (Web.Page.Rep.RepF r a) instance Data.Bifunctor.Bifunctor Web.Page.Rep.RepF instance Data.Biapplicative.Biapplicative Web.Page.Rep.RepF instance GHC.Base.Monoid r => GHC.Base.Applicative (Web.Page.Rep.RepF r) instance Data.Aeson.Types.ToJSON.ToJSON Web.Page.Rep.Element instance Data.Aeson.Types.FromJSON.FromJSON Web.Page.Rep.Element module Web.Page.Rep.Input -- | create a sharedRep from an Input repInput :: (Monad m, ToHtml a, Show a) => Parser a -> (a -> Text) -> Input a -> a -> SharedRep m a -- | does not put a value into the HashMap on instantiation, consumes the -- value when found in the HashMap, and substitutes a default on lookup -- failure repMessage :: (Monad m, ToHtml a, Show a) => Parser a -> (a -> Text) -> Input a -> a -> a -> SharedRep m a sliderI :: (Monad m, ToHtml a, Integral a, Show a) => Maybe Text -> a -> a -> a -> a -> SharedRep m a slider :: Monad m => Maybe Text -> Double -> Double -> Double -> Double -> SharedRep m Double dropdown :: (Monad m, ToHtml a, Show a) => Parser a -> (a -> Text) -> Maybe Text -> [Text] -> a -> SharedRep m a datalist :: Monad m => Maybe Text -> [Text] -> Text -> Text -> SharedRep m Text dropdownSum :: (Monad m, ToHtml a, Show a) => Parser a -> (a -> Text) -> Maybe Text -> [Text] -> a -> SharedRep m a colorPicker :: Monad m => Maybe Text -> PixelRGB8 -> SharedRep m PixelRGB8 textbox :: Monad m => Maybe Text -> Text -> SharedRep m Text textarea :: Monad m => Int -> Maybe Text -> Text -> SharedRep m Text checkbox :: Monad m => Maybe Text -> Bool -> SharedRep m Bool toggle :: Monad m => Maybe Text -> Bool -> SharedRep m Bool button :: Monad m => Maybe Text -> SharedRep m Bool chooseFile :: Monad m => Maybe Text -> Text -> SharedRep m Text -- | represent a Maybe type using a checkbox hiding the underlying content -- on Nothing maybeRep :: Monad m => Maybe Text -> Bool -> SharedRep m a -> SharedRep m (Maybe a) -- | representation of web concerns (css, js & html) fiddle :: Monad m => Concerns Text -> SharedRep m (Concerns Text, Bool) -- | turns a SharedRep into a fiddle viaFiddle :: Monad m => SharedRep m a -> SharedRep m (Bool, Concerns Text, a) module Web.Page.Bridge bridgePage :: Page sendc :: Engine -> Text -> IO () append :: Engine -> Text -> Text -> IO () replace :: Engine -> Text -> Text -> IO () appendWithScript :: Engine -> Text -> Text -> IO () replaceWithScript :: Engine -> Text -> Text -> IO () bridge :: Engine -> Cont_ IO Value sendConcerns :: Engine -> Text -> Concerns Text -> IO () -- | An Engine is a handle to a specific JavaScript engine data Engine -- | This accepts WebSocket requests, calls the callback with an -- Engine that can be used to access JavaScript. start :: (Engine -> IO ()) -> Application -> Application -- | The WAI application. -- -- Note that, since WAI 3.0, this type is structured in continuation -- passing style to allow for proper safe resource handling. This was -- handled in the past via other means (e.g., ResourceT). As a -- demonstration: -- --
-- app :: Application -- app req respond = bracket_ -- (putStrLn "Allocating scarce resource") -- (putStrLn "Cleaning up") -- (respond $ responseLBS status200 [] "Hello World") --type Application = Request -> Response -> IO ResponseReceived -> IO ResponseReceived -- | create Wai Middleware for a SharedRep providing an initialiser and -- action on events midShared :: Show a => SharedRep IO a -> (Engine -> Rep a -> StateT (HashMap Text Text) IO ()) -> (Engine -> Either Text (HashMap Text Text, Either Text a) -> IO ()) -> Application -> Application module Web.Page renderJs :: JS -> Text renderCss :: Css -> Text renderHtml :: Html a -> Text -- | A JSON value represented as a Haskell value. data Value Object :: !Object -> Value Array :: !Array -> Value String :: !Text -> Value Number :: !Scientific -> Value Bool :: !Bool -> Value Null :: Value -- | A specialised variant of bracket with just a computation to run -- afterward. finally :: () => IO a -> IO b -> IO a -- | Classic pixel type storing 8bit red, green and blue (RGB) information. -- Values are stored in the following order: -- --