Copyright | Copyright © 2015 PivotCloud Inc. |
---|---|
License | MIT |
Maintainer | Lars Kuhtz <lkuhtz@pivotmail.com> |
Stability | experimental |
Safe Haskell | None |
Language | Haskell2010 |
The distinction between appending on the left and appending on
the right is important for monoids that are sensitive to ordering
such as List
. It is also of relevance for monoids with set semantics
with non-extensional equality such as HashMap
.
- data LeftMonoidalUpdate α
- leftMonoidalUpdate :: Iso (LeftMonoidalUpdate α) (LeftMonoidalUpdate β) α β
- fromLeftMonoidalUpdate :: Iso α β (LeftMonoidalUpdate α) (LeftMonoidalUpdate β)
- pLeftMonoidalUpdate :: Monoid α => Parser α -> MParser α
- data RightMonoidalUpdate α
- rightMonoidalUpdate :: Iso (RightMonoidalUpdate α) (RightMonoidalUpdate β) α β
- fromRightMonoidalUpdate :: Iso α β (RightMonoidalUpdate α) (RightMonoidalUpdate β)
- pRightMonoidalUpdate :: Monoid α => Parser α -> MParser α
Documentation
data LeftMonoidalUpdate α Source #
Update a value by appending on the left. Under normal
circumstances you'll never use this type directly but only
its FromJSON
instance. See the leftMonoidalUpdate
for an example.
Monoid α => Monoid (LeftMonoidalUpdate α) Source # | |
(FromJSON α, Monoid α) => FromJSON (LeftMonoidalUpdate α -> LeftMonoidalUpdate α) Source # | |
leftMonoidalUpdate :: Iso (LeftMonoidalUpdate α) (LeftMonoidalUpdate β) α β Source #
Update a value by appending on the left.
newtype RoutingTable = RoutingTable { _routingTableMap ∷ HashMap T.Text T.Text } $(makeLenses ''RoutingTable) instance FromJSON (RoutingTable → RoutingTable) where parseJSON = withObject "RoutingTable" $ \o → id <$< routingTableMap . from leftMonoidalUpdate %.: "route_map" % o
fromLeftMonoidalUpdate :: Iso α β (LeftMonoidalUpdate α) (LeftMonoidalUpdate β) Source #
This is the same as from leftMonoidalUpdate
but doesn't depend on
the lens Library.
pLeftMonoidalUpdate :: Monoid α => Parser α -> MParser α Source #
Update a value by appending on the left.
newtype RoutingTable = RoutingTable { _routingTableMap ∷ HashMap T.Text T.Text } $(makeLenses ''RoutingTable) pRoutingTable ∷ MParser RoutingTable pRoutingTable = routingTableMap %:: pLeftMonoidalUpdate pRoute where pRoute = option (eitherReader readRoute) % long "route" <> help "add a route to the routing table; the APIROUTE part must not contain a colon character" <> metavar "APIROUTE:APIURL" readRoute s = case break (== ':') s of (a,':':b) → fmapL T.unpack $ do validateNonEmpty "APIROUTE" a validateHttpOrHttpsUrl "APIURL" b return $ HM.singleton (T.pack a) (T.pack b) _ → Left "missing colon between APIROUTE and APIURL" fmapL f = either (Left . f) Right
data RightMonoidalUpdate α Source #
Update a value by appending on the right. Under normal
circumstances you'll never use this type directly but only
its FromJSON
instance. See the leftMonoidalUpdate
for an example.
Monoid α => Monoid (RightMonoidalUpdate α) Source # | |
(FromJSON α, Monoid α) => FromJSON (RightMonoidalUpdate α -> RightMonoidalUpdate α) Source # | |
rightMonoidalUpdate :: Iso (RightMonoidalUpdate α) (RightMonoidalUpdate β) α β Source #
Update a value by appending on the right. See leftMonoidalUpdate
for
an usage example.
fromRightMonoidalUpdate :: Iso α β (RightMonoidalUpdate α) (RightMonoidalUpdate β) Source #
This is the same as from rightMonoidalUpdate
but doesn't depend on
the lens Library.
pRightMonoidalUpdate :: Monoid α => Parser α -> MParser α Source #
Update a value by appending on the right. See pLeftMonoidalUpdate
for an usage example.