-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Framework for rendering things with metadata/headers and values
--   
--   Please see README.md
@package glaze
@version 0.3.0.1


-- | Framework for rendering things (or list of things, or things that
--   contain things) that have metadata/header information as well as
--   values.
module Glaze

-- | Glaze is something that knows how to render some header information
--   and given a value, how to render the value. Ie, the value has been
--   glazeed with meta information.
data Glaze a r
Glaze :: r -> (a -> r) -> Glaze a r
[renderedMeta] :: Glaze a r -> r
[valueRenderer] :: Glaze a r -> a -> r

-- | Given a wrapping function for the meta and renderer value, and Glaze
--   instructions for a, run them all together.
unglazeWith :: (r -> r -> b) -> Glaze a r -> a -> b

-- | Lifts glazing function into an Applicative This is used to transform
--   functions like <a>glazeList</a> into <a>glazeListA</a>
glazedA :: (Traversable t, Applicative m) => (wrapper -> meta -> t rs -> r) -> m wrapper -> m meta -> t (m rs) -> m r

-- | This can be used to make a Glaze for a list of things to render as a
--   table. Given (mainWrapper :: rows -&gt; final render,
--   headerRowWrapper:: fields -&gt; header row, valueRowWrapper -&gt;
--   value row) the rendered meta, and a list of <tt>Glaze a</tt> columns
--   to use, transform it to a Glaze for a list of as.
glazeList :: ([row] -> r, [field] -> row, [field] -> row) -> r -> [Glaze a field] -> Glaze [a] r

-- | Applicative version of glazeList
glazeListA :: Applicative f => f ([row] -> r, [field] -> row, [field] -> row) -> f r -> [f (Glaze a field)] -> f (Glaze [a] r)

-- | This can be used to generate a Glaze for a larger supercomponent.
--   Given (wrapper :: list of (meta, rendered value) to final render) the
--   rendered meta, and a list of <tt>Glaze a</tt> field to use, transform
--   it to a Glaze for a single a. In this case, use <a>reglaze</a> to
--   generate <tt>Glaze a</tt> for each subcomponent to use as the list of
--   <tt>Glaze a</tt>
glazeFields :: ([(b, b)] -> r) -> r -> [Glaze a b] -> Glaze a r

-- | Applicative versino of glazeFields
glazeFieldsA :: Applicative f => f ([(b, b)] -> r) -> f r -> [f (Glaze a b)] -> f (Glaze a r)

-- | Makes a glaze of the type of a larger component, but only using the
--   information of a smaller component. Given a Glaze and Lens into
--   subcomponent a, create the glaze of the type of the larger component.
reglaze :: Glaze a r -> Getter s a -> Glaze s r

-- | Applicative version of reglaze
reglazeA :: Applicative f => f (Glaze a r) -> Getter s a -> f (Glaze s r)
instance GHC.Base.Functor (Glaze.Glaze a)
instance GHC.Base.Applicative (Glaze.Glaze a)
