Safe Haskell | None |
---|---|
Language | GHC2021 |
Ondim.State
Synopsis
- type NamespaceMap m = NamespaceMapM m ()
- binding :: Ondim s a -> NamespaceMap s -> Ondim s a
- mapToNamespace :: NamespaceMap m -> Namespace m
- (#:) :: Text -> NamespaceItem m -> NamespaceMap m
- unbind :: Text -> NamespaceMap m
- (##) :: (HasCallStack, Typeable t) => Text -> Expansion m t -> NamespaceMap m
- typedExpansion :: (HasCallStack, Typeable t) => Expansion m t -> NamespaceItem m
- (#*) :: HasCallStack => Text -> PolyExpansion m -> NamespaceMap m
- polyExpansion :: HasCallStack => PolyExpansion m -> NamespaceItem m
- (#%) :: (HasCallStack, OndimNode a) => Text -> a -> NamespaceMap m
- templateData :: (HasCallStack, OndimNode a) => a -> NamespaceItem m
- (#@) :: HasCallStack => Text -> Text -> NamespaceMap m
- textData :: HasCallStack => Text -> NamespaceItem m
- (#.) :: Text -> NamespaceMap m -> NamespaceMap m
- namespace :: NamespaceMap m -> NamespaceItem m
- newtype OndimState s = OndimState {
- expansions :: Namespace s
- data NamespaceItem s where
- TypedExpansion :: forall a s. Typeable a => DefinitionSite -> Expansion s a -> NamespaceItem s
- PolyExpansion :: forall s. DefinitionSite -> PolyExpansion s -> NamespaceItem s
- TemplateData :: forall a s. OndimNode a => DefinitionSite -> a -> NamespaceItem s
- NamespaceData :: forall s. Namespace s -> NamespaceItem s
- newtype Namespace m = Namespace {
- hashmap :: HashMap Text (NamespaceItem m)
- getOndimS :: Ondim s (OndimState s)
- modifyOndimS :: (OndimState s -> OndimState s) -> Ondim s ()
- putOndimS :: OndimState s -> Ondim s ()
- withSomeExpansion :: Text -> Maybe (NamespaceItem s) -> Ondim s a -> Ondim s a
- putSomeExpansion :: Text -> Maybe (NamespaceItem s) -> Ondim s ()
- withoutExpansions :: [Text] -> Ondim s a -> Ondim s a
- withNamespace :: Namespace s -> Ondim s a -> Ondim s a
- lookup :: Text -> Namespace m -> Maybe (NamespaceItem m)
- insert :: Text -> NamespaceItem m -> Namespace m -> Namespace m
- delete :: Text -> Namespace m -> Namespace m
Namespace maps
type NamespaceMap m = NamespaceMapM m () Source #
NamespaceMap
provides a monad interface for defining namespaces
declaratively. You should enable the BlockArguments
extension when using
it. For instance:
expandChildren
myNode `binding
` do "something"##
myTypedExp "is-cow"#*
ifElse isCow "name"#@
"Joana" "properties"#.
do "age"#@
show age "state"#@
"hungry"
binding :: Ondim s a -> NamespaceMap s -> Ondim s a Source #
Infix version of withNamespace
meant to bind expansions more conveniently
by using NamespaceMap
s.
mapToNamespace :: NamespaceMap m -> Namespace m Source #
Runs the NamespaceMap
monad to get a Namespace
.
(#:) :: Text -> NamespaceItem m -> NamespaceMap m infixr 0 Source #
Infix to add a NamespaceItem
to a NamespaceMap
.
unbind :: Text -> NamespaceMap m Source #
Remove a previously added item from the NamespaceMap
.
Typed expansions
(##) :: (HasCallStack, Typeable t) => Text -> Expansion m t -> NamespaceMap m infixr 0 Source #
Infix to add an Expansion
to a NamespaceMap
.
name##
expansion = name#:
typedExpansion
expansion
typedExpansion :: (HasCallStack, Typeable t) => Expansion m t -> NamespaceItem m Source #
Polymorphic expansions
(#*) :: HasCallStack => Text -> PolyExpansion m -> NamespaceMap m infixr 0 Source #
Infix to add a PolyExpansion
to a NamespaceMap
.
name#*
expansion = name#:
polyExpansion
expansion
polyExpansion :: HasCallStack => PolyExpansion m -> NamespaceItem m Source #
Templates
(#%) :: (HasCallStack, OndimNode a) => Text -> a -> NamespaceMap m infixr 0 Source #
Infix to add a template (any type with an OndimNode
instance) to a
NamespaceMap
.
name#%
template = name#:
templateData
template
templateData :: (HasCallStack, OndimNode a) => a -> NamespaceItem m Source #
Textual templates
(#@) :: HasCallStack => Text -> Text -> NamespaceMap m infixr 0 Source #
Infix to add a textual data to a NamespaceMap
. Just a specialized version
of #%
.
name#@
text = name#:
textData
text
textData :: HasCallStack => Text -> NamespaceItem m Source #
Namespaces
(#.) :: Text -> NamespaceMap m -> NamespaceMap m infixr 0 Source #
Infix to nest a NamespaceMap
inside a NamespaceMap
.
name#.
nsMap = name#:
namespace
nsMap
namespace :: NamespaceMap m -> NamespaceItem m Source #
Datatypes
newtype OndimState s Source #
Ondim's expansion state
Constructors
OndimState | |
Fields
|
Instances
data NamespaceItem s where Source #
An opaque datatype that should be regarded as a sum of four possible types:
- Typed expansions, i.e., expansions that apply to a single type (use the
typedExpansion
constructor). - Polymorphic expansions, i.e., expansions that are polymophic over types
with
OndimNode
instances (use thepolyExpansion
constructor). - Templates, i.e., raw node data that represents templates. (use the
templateData
constructor). - Namespaces, i.e., nested namespaces. (use the
namespace
constructor).
Constructors
TypedExpansion :: forall a s. Typeable a => DefinitionSite -> Expansion s a -> NamespaceItem s | |
PolyExpansion :: forall s. DefinitionSite -> PolyExpansion s -> NamespaceItem s | |
TemplateData :: forall a s. OndimNode a => DefinitionSite -> a -> NamespaceItem s | |
NamespaceData :: forall s. Namespace s -> NamespaceItem s |
A namespace. Internally represented as a hashmap from Text
keys to
values.NamespaceItem
m
Constructors
Namespace | |
Fields
|
Instances
Monoid (Namespace s) Source # | |||||
Semigroup (Namespace s) Source # | |||||
Generic (Namespace m) Source # | |||||
Defined in Ondim.Internal.Basic Associated Types
| |||||
type Rep (Namespace m) Source # | |||||
Defined in Ondim.Internal.Basic type Rep (Namespace m) = D1 ('MetaData "Namespace" "Ondim.Internal.Basic" "ondim-0.1.0.0-inplace" 'True) (C1 ('MetaCons "Namespace" 'PrefixI 'True) (S1 ('MetaSel ('Just "hashmap") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (HashMap Text (NamespaceItem m))))) |
Manipulate the whole state
getOndimS :: Ondim s (OndimState s) Source #
Get the Ondim state.
modifyOndimS :: (OndimState s -> OndimState s) -> Ondim s () Source #
putOndimS :: OndimState s -> Ondim s () Source #
Manipulate the state by keys
withSomeExpansion :: Text -> Maybe (NamespaceItem s) -> Ondim s a -> Ondim s a Source #
Either bind or unbind an expansion locally.
putSomeExpansion :: Text -> Maybe (NamespaceItem s) -> Ondim s () Source #
Either put or delete an expansion from the state.