D]O      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMN SafeOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSafe35INU  between a  and a target type.This  strips/appends a suffix.*("/hello/there"::Text) ^? suffixed "there"Just "/hello/"$suffixed "there" # ("/hello/"::Text)"/hello/there"6If matching the entire source it previews to an empty S. You might use  $ if you are expecting this behavior.#("hello"::Text) ^? suffixed "hello"Just ""This also means that to %1 an entire source, you need to give it an empty S.!suffixed "hello" # (mempty::Text)"hello" An empty - matches to itself regardless of the pattern.Spreview (suffixed "hello") (review (suffixed "hello") (mempty::Text)) <&> is _Empty Just TrueThis  strips/prepends a prefix.,("/hello/there"::Text) ^? prefixed "/hello/" Just "there"$prefixed "/hello/" # ("there"::Text)"/hello/there"6If matching the entire source it previews to an empty S. You might use  $ if you are expecting this behavior.#("hello"::Text) ^? prefixed "hello"Just ""This also means that to %1 an entire source, you need to give it an empty S.!prefixed "hello" # (mempty::Text)"hello" An empty - matches to itself regardless of the pattern.Spreview (prefixed "hello") (review (prefixed "hello") (mempty::Text)) <&> is _Empty Just TrueThis contains matched S( in reverse order to how it was matched. This is just to pure with a refined type.This   splits/joinsC at the first occurrence of a boundary for the first value of a .5pure "hello/out/there" ^? sep "/" <&> toListOf foldedJust ["out/there","hello"]9sep "/" # (pure "out/there" <> pure "hello") & view _head"hello/out/there"GNotice what happens when there is no source before or after a boundary:pure "hello/" ^? sep "/"Just ["","hello"]*(pure "hello/" <> pure "there") ^? sep "/"Just ["","hello","there"]pure "/hello" ^? sep "/"Just ["hello",""]*(pure "/hello" <> pure "there") ^? sep "/"Just ["hello","","there"]When the source isE identical to the boundary: >>> pure "hello" ^? sep "hello" Just [] This is the composition of  and !. Use this to avoid lifting a ! explicitly. Notice that, unlike , this is not reversible. This is just an alias to U. Use this to match the entirety of the source. The source mustn't be lifted to a ."hello" ^? exact "hello"Just ()TLike U# but discards the needle and wraps VN when there is no needle. When the needle is empty it breaks until the end.WLike S instance but for the head of a XLike S instance but for the head of a  TYZ[\]W^X_    TYZ[\]W^X_Safe 5Represents something that can be deserialized from a ` within the context of Nero. Notice that the whole ` has to be consumed. 1Represents something that can be serialized to a ` with the context of Nero. A convenient  to pack serializers/deserializers.      Safe>ILNA a' with multiple values. Also known as a  MultiDict in other web frameworks.A ) of the values of a given HTTP parameter.Like b from Data.Map but cing the values.Is the map empty?c Encode a & with the typical query string format.d%The default monoid implementation of Data.Map( is left biased, this implementation c s the values.efcghijkld efcghijkldSafeU A  to access a potential .A  in the context of a form.Get the  for types with one.'It's the main data associated with the  of Request or a Response.A  for types with a . Indicates a Text encoding. Contains the % and any metadata associated with it.!A  to obtain a  from a  and make  from a ."A  with an empty  useful for testing.mnopq !"rst !" !"mnopq !"rstSafeU # for types with a -.% for types with a ..' for types with a /.) to obtain the 3 of types with Location.+ for types with an 3.-The  query string in the form of a ..Path after the host name in a 3./The host name of a 3.0The scheme given in the 3, i.e. http or https.3Composite type of a 0, /, ., -.5Empty 3 useful for testing.#$%&'()*+,-./012345uvwxyz{#$%&'()*+,-./01234534012/.-+,)*'(%&#$5#$%&'()*+,-./012345uvwxyz{SafeU 6A POST 8.7A GET 8.8An HTTP Request.9Smart constructor for 7 8s.:Smart constructor for 6 8s.; for 7 8s.< to filter for 6 8s.=Show 8 method.> to obtain a  from a 8. This is not a  because some 8 s, such has 7, are not allowed to have a .?This U lets you traverse every HTTP parameter regardless of whether it's present in the  query string or in the form encoded body of a POST 8. In the rare case where there are HTTP parameters in both, every parameter is still being traversed starting from the /query string/.You might want to use % for traversing a specific parameter.glet request = dummyRequestForm & query . at "name" ?~ ["hello", "out"] & form . at "name" ?~ ["there"]"foldOf params request ^? ix "name"Just ["hello","out","there"]@(An empty GET request useful for testing.A$An empty POST request with an empty form encoded body useful for testing.|6It traverses the values with the same key both in the  query string and the form encoded body of a POST 8. 6}7~89:;<=>?@A| 6789:;<=>?@A 89:;<=>?76@A6}7~89:;<=>?@A|SafeU B%The HTTP status code and description.CAn HTTP response.D Creates an 200 OKG response from the given text. It automatically encodes the text to 'utf-8'. The  Mime type is text/plain.E Creates an 301 Moved Permanently response with the ) corresponding to the given 3.F Creates an  404 Not FoundG response from the given text. It automatically encodes the text to 'utf-8'. The  Mime type is text/plain.GA  to obtain/convert a  from/to a 200 OK C.HA  to obtain/convert a  from/to a 301 Moved Permanently C.IA  to obtain/convert a  from/to a  404 Not Found C.J Obtain the B from a C.BCDEFGHIJ BCDEFGHIJ CDEFGHIBJ BCDEFGHIJSafe35INUKDUltimately any valid Nero server application must be transformed 8 ->  CE. This type class facilitates the creation of web server handling Nero applications.NRedirect with slash appended URL if only a trailing slash is needed for successful matching, otherwise it responds normally.Blet mkRequest p = dummyRequest & host .~ "example.com" & path .~ p7let respond name = ok $ "<h1>Hello " <> name <> "</h1>"`let app = slashRedirect (prefixed "/hello/" . suffixed "/") respond :: Request -> Maybe Response)app (mkRequest "/hello/there") <&> statusJust "301 Moved Permanently">app (mkRequest "/hello/there") >>= preview location <&> render&Just "http://example.com/hello/there/"*app (mkRequest "/hello/there/") <&> status Just "200 OK"(app (mkRequest "/hello/there/") <&> bodyJust "<h1>Hello there</h1>"app $ mkRequest "/bye/"NothingKLMNWhat to respond upon matching.KLMNMKLNKLMN Safe&OPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQR $&356789:;<=?@ACDEKLM"MKL89:;<=&$?76CDE3 @A5    !"#$%&'()*+,-./0123456789:;<=>>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[YZ\Y]^_`a_`bYcdYceYceYfgYfhYijYikY]lYmnYmoYmoYpqYrsYtuYvwYZxYZyYZz_`{|}~|}|}|}|}|}|}|}|}|}|}|}|}|}|}|}|}|}|}|}|}|}|}|}|}|}|}|}|}|}|}|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| | | | | ||||||||||||||||||| |!|"|#|$|%|&'|&(|&)|&*|&+|&,|&-|&.|&/|&0|&1|&2|&3|&4|&5|&6|&7|&8|&9|&:|&;|&<|&=|&>|&?|&@|&A|&B|&C|&D|&E|&F|&G|&H|&I|&J|&K|&L|&M|&N|&O|&P|&Q|&R|ST|SU|VW|VX|VY|VZ|V[|V\|V]|V^|V_|V`|Va|Vb|Vc|Vd|Ve|Vf|Vg|Vh|Vi|Vj|Vk|Vl|Vm|Vn|Vo|Vp|Vq|Vr|Vs|Vt|Vu|Vv|Vw|Vx|Vy|Vz|V{|V||V}|V~|V|V|V|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| | | | | ||||||||||||||||||| |!|"|#|$|%|&|'|(|)|*|+|,|-|./|.0|.1|.2|34|35|36|37|38|39|3:|3;|3<|3=|3>|3?|3@|3A|3B|3C|3D|3E|3F|3G|HI|HJ|HK|HL|HM|HN|HO|HP|HQ|HR|ST|SU|SV|SW|SX|SY|SZ|S[|S\|S]|S^|S_|S`|Sa|Sb|Sc|Sd|Se|Sf|Sg|Sh|Si|jk|jl|jm|jn|jo|jp|jq|jr|js|jt|ju|jv|jw|jx|jy|jz|j{|j||j}|j~|j|j|j|j|j|j|j|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| | | | | ||||||||||||||||||| |!|"(|"#|",|"$|"%|"&|"4|"'|"(|")|"0|"*|"+|",|"-|".|"/|"0|"D|"1|"H|"2|"3|"4|"L|"5|"P|"6|"7|"8|"9|"8|";|":|">|"A|";|"<|"=|">|"?|"@|"A|"B|"C|"D|"E|"F|"G|"H|"I|JK|JL|JM|JN|OP|QR|ST|SU|SU|SV|SW|SX|SX|SY|Z[|Z[|Z\|]^|]_|]`|]a|]b|]c|]d|]e|]f|]f|gh|ij|ik|lm|ln|opqrsqrtuvwuvxuvyuvzu{|u{}u{~YZ@ALnero_4ff7bMH6loV9AocihmZPh2 Nero.Match Nero.Binary Nero.Param Nero.PayloadNero.Url Nero.Request Nero.ResponseNero.Application Nero.PreludeNeroTargettargetSuffixedsuffixedPrefixedprefixedMatchmatchsepsplitexact Parseableparse RenderablerenderbinaryMultiMapParamparamfromListnullFormedformFormHasBodybodyBody HasPayloadpayloadEncodingPayload utf8Encoding payloadText_FormdummyPayloadFormHasQueryqueryHasPathpathHasHosthostLocationlocationHasUrlurlQueryPathHostSchemeHttpHttpsUrldummyUrlPOSTGETRequestgetpost_GET_POSTmethod payloadedparams dummyRequestdummyRequestFormStatusResponseokmovedPermanentlynotFound_Ok_MovedPermanently _NotFoundstatusServer application Application slashRedirectbaseGHC.Base<*>pureData.Traversable Traversablecontr_9XVhnAbQBQO35muPYSTbQ0Data.Functor.Contravariant contramap ContravariantData.Functor.Identity runIdentityIdentityData.Bifunctorbimap Bifunctor Control.Monad<=<>=>traverseControl.ApplicativegetConstConst Data.Foldablefold Data.Monoid<> Data.Function& Data.Functor<$>mappendmemptyMonoid>$lens_E7yAyXiOpsCBtIYnvQwUWsControl.Lens.THdefaultFieldRules makeFieldsabbreviatedFieldscamelCaseFieldsunderscoreFields makeWrappeddeclareLensesWith declareFieldsdeclareWrapped declarePrismsdeclareClassyFor declareClassydeclareLensesFor declareLensesmakeLensesWith makeClassyFor makeLensesFor makeClassy_ makeClassy makeLenses classyRules_ classyRules lensRulesFor lensRules lensClass lensField createClassgenerateLazyPatternsgenerateUpdateableOpticsgenerateSignatures simpleLensesControl.Lens.Internal.PrismTHmakeClassyPrisms makePrismsControl.Lens.Internal.FieldTH LensRules MethodNameTopNameDefNameControl.Lens.AtsansixAtIndexcontainsContainsIxValueixIxedatAtControl.Lens.Consunsnocsnoc|>_last_init_tail_headunconscons<|_ConsCons_SnocSnocControl.Lens.EacheachEachControl.Lens.Empty_EmptyAsEmptyControl.Lens.Wrappedalafala _Unwrapping _Wrapping _Unwrapping' _Wrapping'op _Unwrapped_Wrapped _Unwrapped' _Wrapped' UnwrappedWrapped Rewrapped RewrappingControl.Lens.Iso bimappingrmappinglmapping dimapping contramappingimagmamagma involutedreversedlazyflipped uncurriedcurriedanonnon'nonmappingenumunderaufaucloneIsowithIsofromisoAnIsoAnIso'swappedSwappedstrictStrictControl.Lens.EqualitysimplesimplyfromEqmapEqsubstEqrunEq Identical AnEquality AnEquality'Control.Lens.Platedgplateparts composOpFoldparaparaOf holesOnOfholesOnholes contextsOnOf contextsOn contextsOfcontextstransformMOnOf transformMOf transformMOn transformM transformOnOf transformOf transformOn transform universeOnOf universeOn universeOfuniverse rewriteMOnOf rewriteMOn rewriteMOfrewriteM rewriteOnOf rewriteOn rewriteOfrewritechildrendeep...platePlatedGPlatedControl.Lens.ReifiedrunLensLens ReifiedLens ReifiedLens'runIndexedLens IndexedLensReifiedIndexedLensReifiedIndexedLens'runIndexedTraversalIndexedTraversalReifiedIndexedTraversalReifiedIndexedTraversal' runTraversal TraversalReifiedTraversalReifiedTraversal' runGetterGetter ReifiedGetterrunIndexedGetter IndexedGetterReifiedIndexedGetterrunFoldFold ReifiedFoldrunIndexedFold IndexedFoldReifiedIndexedFold runSetterSetter ReifiedSetterReifiedSetter'runIndexedSetter IndexedSetterReifiedIndexedSetterReifiedIndexedSetter'runIsoIso ReifiedIso ReifiedIso'runPrismPrism ReifiedPrism ReifiedPrism'Control.Lens.LevelilevelslevelsControl.Lens.Indexed ifoldMapByOf ifoldMapBy imapAccumL imapAccumRiforMimapMiforitoListifoldlMifoldrMifind iconcatMapiforM_imapM_ifor_ itraverse_noneinoneiallianyindexindicesasIndex withIndexicompose<.> reindexed selfIndex.><.imappedimapFunctorWithIndexifoldl'ifoldr'ifoldlifoldrifoldedifoldMapFoldableWithIndex itraversed itraverseTraversableWithIndexControl.Lens.Traversal confusingdeepOffailing ifailoverfailoverelements elementsOfelement elementOfignored traversed64 traversed1 traversed imapAccumLOf imapAccumROfiforMOfimapMOfiforOf itraverseOfcloneIndexedTraversal1cloneIndexPreservingTraversal1cloneTraversal1cloneIndexedTraversalcloneIndexPreservingTraversalcloneTraversaldroppingtakingbesidebothunsafeSingularsingularholesOfiunsafePartsOf'unsafePartsOf'iunsafePartsOf unsafePartsOf ipartsOf'partsOf'ipartsOfpartsOfilocilociscanl1Ofscanr1Of mapAccumLOf mapAccumROf transposeOf sequenceOfforMOfmapMOf sequenceAOfforOf traverseOf ATraversal ATraversal' ATraversal1 ATraversal1'AnIndexedTraversalAnIndexedTraversal1AnIndexedTraversal'AnIndexedTraversal1' Traversing Traversing1 Traversing' Traversing1' traverseMin TraverseMin traverseMax TraverseMaxControl.Lens.Fold foldMapByOf foldMapByfoldByOffoldByidroppingWhile itakingWhile ifiltered^@?!^@?^@.. itoListOf ifoldlMOf ifoldrMOf ifoldlOf' ifoldrOf'ifindMOfifindOf iconcatMapOfiforMOf_imapMOf_iforOf_ itraverseOf_inoneOfiallOfianyOfifoldlOfifoldrOf ifoldMapOf backwardsipreusespreusesipreusepreuse ipreviewspreviewsipreviewpreviewipreprehasn'thasfoldlMOffoldrMOf foldl1Of' foldr1Of'foldlOf'foldrOf'foldl1Offoldr1OffindMOffindOf minimumByOf maximumByOf minimumOf maximumOf notNullOfnullOflastOffirstOf^?!^?lengthOfconcatOf concatMapOf notElemOfelemOfmsumOfasumOf sequenceOf_forMOf_mapMOf_ sequenceAOf_forOf_ traverseOf_sumOf productOfnoneOfallOfanyOforOfandOf^..toListOffoldlOffoldrOffoldOf foldMapOflinedworded droppingWhile takingWhilefilterediteratedunfoldedcycled replicatedrepeatedfolded64foldedifoldingfoldingControl.Lens.ZoomzoomZoommagnifyMagnifyControl.Lens.Prism_Shownearlyonly_Void_Nothing_Just_Right_Leftmatchingisn'tbelowasidewithoutoutsideprism'prism clonePrism withPrismAPrismAPrism'Control.Lens.Reviewreusesreusereviews#reviewreununtoReviewAReviewControl.Lens.Gettercoerced^@.iusesiuseiviewsiview ilistenings listenings ilistening listeningusesuse^.viewsviewilikelikeitotoGettingIndexedGetting AccessingControl.Lens.Tuple_9'_8'_7'_6'_5'_4'_3'_2'_1'_1Field1_2Field2_3Field3_4Field4_5Field5_6Field6_7Field7_8Field8_9Field9Control.Lens.Lensfusinguniteddevoid<#=<#~#%%=<#%=<#%~#%=#=#%%~#%~#~storing^#<<%@=<%@=%%@=%%@~<<%@~<%@~overA<<>=<<>~<<~<<<>=<<&&=<<||=<<**=<<^^=<<^=<~<<&&~<<||~<<**~<<^^~<<^~<%%=%%~&~ilensiplenslensALensALens' AnIndexedLensAnIndexedLens'Control.Lens.SetterimapOfmapOfassignA.@=%@=.@~%@~isetsisetiover icensoring censoringipassingpassingscribe<>=<>~) $fServer(->)0$fServerResponse