URI.Extra.QueryPairs
#QueryPairs
newtype QueryPairs k v
A query string split into an array of key/value pairs. There is no precise spec for this, but the format is commonly used, so this attempts to handle these strings in a sensible way.
- The representation uses an array rather than a map, so duplicate keys are supported.
- Keys are not required to have a value associated.
&
and;
are both treated as pair delimiters.
Constructors
QueryPairs (Array (Tuple k (Maybe v)))
Instances
(Eq k, Eq v) => Eq (QueryPairs k v)
(Ord k, Ord v) => Ord (QueryPairs k v)
Generic (QueryPairs k v) _
(Show k, Show v) => Show (QueryPairs k v)
Semigroup (QueryPairs k v)
Monoid (QueryPairs k v)
#parse
parse :: forall k v. (Key -> Either URIPartParseError k) -> (Value -> Either URIPartParseError v) -> Query -> Either URIPartParseError (QueryPairs k v)
Parses a query into key/value pairs.
This function allows for the Key
and Value
components to be parsed
into custom representations. If this is not necessary, use pure
for both
these arguments.
print :: forall k v. (k -> Key) -> (v -> Value) -> QueryPairs k v -> Query
A printer for key/value pairs style query string.
As a counterpart to the parser
this function also requires the Key
and Value
components to be printed back from their custom representations.
If no custom types are being used, pass identity
for both of these arguments.
#keyPartChar
keyPartChar :: Parser String Char
The supported key characters, excluding percent-encodings.
#valuePartChar
valuePartChar :: Parser String Char
The supported value characters, excluding percent-encodings.
#Key
#keyFromString
keyFromString :: String -> Key
Constructs a key value from a string, percent-encoding any characters
that require it. Note that running this on a string that has already had
percent-encoding applied will double-encode it, for those situations use
unsafeKeyFromString
instead.
keyFromString "foo" = unsafeKeyFromString "foo"
keyFromString "foo#bar" = unsafeKeyFromString "foo%23bar"
keyFromString "foo%23bar" = unsafeKeyFromString "foo%2523bar"
#keyToString
keyToString :: Key -> String
Returns the string value for a key, percent-decoding any characters that require it.
keyToString (unsafeKeyFromString "foo") = "foo"
keyToString (unsafeKeyFromString "foo%23bar") = "foo#bar"
#unsafeKeyFromString
unsafeKeyFromString :: String -> Key
Constructs a key value from a string directly - no percent-encoding will be applied. This is useful when using a custom encoding scheme for the key, to prevent double-encoding.
#unsafeKeyToString
unsafeKeyToString :: Key -> String
Returns the string value for a key without percent-decoding. Only
"unsafe" in the sense that values this produces may need further decoding,
the name is more for symmetry with the fromString
/unsafeFromString
pairing.
#Value
#valueFromString
valueFromString :: String -> Value
Constructs a value from a string, percent-encoding any characters
that require it. Note that running this on a string that has already had
percent-encoding applied will double-encode it, for those situations use
unsafeValueFromString
instead.
valueFromString "foo" = unsafeValueFromString "foo"
valueFromString "foo#bar" = unsafeValueFromString "foo%23bar"
valueFromString "foo%23bar" = unsafeValueFromString "foo%2523bar"
#valueToString
valueToString :: Value -> String
Returns the string value for a value, percent-decoding any characters that require it.
valueToString (unsafeValueFromString "foo") = "foo"
valueToString (unsafeValueFromString "foo%23bar") = "foo#bar"
#unsafeValueFromString
unsafeValueFromString :: String -> Value
Constructs a value from a string directly - no percent-encoding will be applied. This is useful when using a custom encoding scheme for the value, to prevent double-encoding.
#unsafeValueToString
unsafeValueToString :: Value -> String
Returns the string value for a value without percent-decoding. Only
"unsafe" in the sense that values this produces may need further decoding,
the name is more for symmetry with the fromString
/unsafeFromString
pairing.
Modules
- Attribute
- Control.Alt
- Control.Alternative
- Control.Applicative
- Control.Apply
- Control.Biapplicative
- Control.Biapply
- Control.Bind
- Control.Category
- Control.Comonad
- Control.Comonad.Cofree
- Control.Comonad.Cofree.Class
- Control.Comonad.Env
- Control.Comonad.Env.Class
- Control.Comonad.Env.Trans
- Control.Comonad.Store
- Control.Comonad.Store.Class
- Control.Comonad.Store.Trans
- Control.Comonad.Traced
- Control.Comonad.Traced.Class
- Control.Comonad.Traced.Trans
- Control.Comonad.Trans.Class
- Control.Extend
- Control.Lazy
- Control.Monad
- Control.Monad.Cont
- Control.Monad.Cont.Class
- Control.Monad.Cont.Trans
- Control.Monad.Error.Class
- Control.Monad.Except
- Control.Monad.Except.Trans
- Control.Monad.Free
- Control.Monad.Free.Class
- Control.Monad.Gen
- Control.Monad.Gen.Class
- Control.Monad.Gen.Common
- Control.Monad.Identity.Trans
- Control.Monad.List.Trans
- Control.Monad.Maybe.Trans
- Control.Monad.RWS
- Control.Monad.RWS.Trans
- Control.Monad.Reader
- Control.Monad.Reader.Class
- Control.Monad.Reader.Trans
- Control.Monad.Rec.Class
- Control.Monad.State
- Control.Monad.State.Class
- Control.Monad.State.Trans
- Control.Monad.Trampoline
- Control.Monad.Trans.Class
- Control.Monad.Writer
- Control.Monad.Writer.Class
- Control.Monad.Writer.Trans
- Control.MonadPlus
- Control.MonadZero
- Control.Parallel
- Control.Parallel.Class
- Control.Plus
- Control.Semigroupoid
- ConvertableOptions
- Cowboy.Static
- Data.Align
- Data.Array
- Data.Array.NonEmpty
- Data.Array.NonEmpty.Internal
- Data.Array.Partial
- Data.Bifoldable
- Data.Bifunctor
- Data.Bifunctor.Join
- Data.Bitraversable
- Data.Boolean
- Data.BooleanAlgebra
- Data.Bounded
- Data.Bounded.Generic
- Data.CatList
- Data.CatQueue
- Data.Char
- Data.Char.Gen
- Data.CodePoint.Unicode
- Data.CodePoint.Unicode.Internal
- Data.CodePoint.Unicode.Internal.Casing
- Data.CommutativeRing
- Data.Compactable
- Data.Comparison
- Data.Const
- Data.Coyoneda
- Data.Date
- Data.Date.Component
- Data.Date.Component.Gen
- Data.Date.Gen
- Data.DateTime
- Data.DateTime.Gen
- Data.DateTime.Instant
- Data.DateTime.Parsing
- Data.Decidable
- Data.Decide
- Data.Distributive
- Data.Divide
- Data.Divisible
- Data.DivisionRing
- Data.Either
- Data.Either.Inject
- Data.Either.Nested
- Data.Enum
- Data.Enum.Gen
- Data.Enum.Generic
- Data.Eq
- Data.Eq.Generic
- Data.Equivalence
- Data.EuclideanRing
- Data.Exists
- Data.Field
- Data.Filterable
- Data.FingerTree
- Data.FingerTree.Digit
- Data.Foldable
- Data.FoldableWithIndex
- Data.Formatter.DateTime
- Data.Formatter.Internal
- Data.Formatter.Interval
- Data.Formatter.Number
- Data.Formatter.Parser.Interval
- Data.Formatter.Parser.Number
- Data.Formatter.Parser.Utils
- Data.Function
- Data.Function.Uncurried
- Data.Functor
- Data.Functor.App
- Data.Functor.Clown
- Data.Functor.Compose
- Data.Functor.Contravariant
- Data.Functor.Coproduct
- Data.Functor.Coproduct.Inject
- Data.Functor.Coproduct.Nested
- Data.Functor.Costar
- Data.Functor.Flip
- Data.Functor.Invariant
- Data.Functor.Joker
- Data.Functor.Product
- Data.Functor.Product.Nested
- Data.Functor.Product2
- Data.Functor.Variant
- Data.FunctorWithIndex
- Data.Generic.Rep
- Data.Graph
- Data.HeytingAlgebra
- Data.HeytingAlgebra.Generic
- Data.Identity
- Data.Int
- Data.Int.Bits
- Data.Interval
- Data.Interval.Duration
- Data.Interval.Duration.Iso
- Data.Lazy
- Data.Lens
- Data.Lens.AffineTraversal
- Data.Lens.At
- Data.Lens.Common
- Data.Lens.Fold
- Data.Lens.Fold.Partial
- Data.Lens.Getter
- Data.Lens.Grate
- Data.Lens.Index
- Data.Lens.Indexed
- Data.Lens.Internal.Bazaar
- Data.Lens.Internal.Exchange
- Data.Lens.Internal.Focusing
- Data.Lens.Internal.Forget
- Data.Lens.Internal.Grating
- Data.Lens.Internal.Indexed
- Data.Lens.Internal.Market
- Data.Lens.Internal.Re
- Data.Lens.Internal.Shop
- Data.Lens.Internal.Stall
- Data.Lens.Internal.Tagged
- Data.Lens.Internal.Wander
- Data.Lens.Internal.Zipping
- Data.Lens.Iso
- Data.Lens.Iso.Newtype
- Data.Lens.Lens
- Data.Lens.Lens.Product
- Data.Lens.Lens.Tuple
- Data.Lens.Lens.Unit
- Data.Lens.Lens.Void
- Data.Lens.Prism
- Data.Lens.Prism.Coproduct
- Data.Lens.Prism.Either
- Data.Lens.Prism.Maybe
- Data.Lens.Record
- Data.Lens.Setter
- Data.Lens.Traversal
- Data.Lens.Types
- Data.Lens.Zoom
- Data.List
- Data.List.Internal
- Data.List.Lazy
- Data.List.Lazy.NonEmpty
- Data.List.Lazy.Types
- Data.List.NonEmpty
- Data.List.Partial
- Data.List.Types
- Data.List.ZipList
- Data.Map
- Data.Map.Gen
- Data.Map.Internal
- Data.Maybe
- Data.Maybe.First
- Data.Maybe.Last
- Data.MediaType
- Data.MediaType.Common
- Data.Monoid
- Data.Monoid.Additive
- Data.Monoid.Alternate
- Data.Monoid.Conj
- Data.Monoid.Disj
- Data.Monoid.Dual
- Data.Monoid.Endo
- Data.Monoid.Generic
- Data.Monoid.Multiplicative
- Data.NaturalTransformation
- Data.Newtype
- Data.NonEmpty
- Data.Nullable
- Data.Number
- Data.Number.Approximate
- Data.Number.Format
- Data.Op
- Data.Ord
- Data.Ord.Down
- Data.Ord.Generic
- Data.Ord.Max
- Data.Ord.Min
- Data.Ordering
- Data.Predicate
- Data.Profunctor
- Data.Profunctor.Choice
- Data.Profunctor.Closed
- Data.Profunctor.Cochoice
- Data.Profunctor.Costrong
- Data.Profunctor.Join
- Data.Profunctor.Split
- Data.Profunctor.Star
- Data.Profunctor.Strong
- Data.Ratio
- Data.Rational
- Data.Ring
- Data.Ring.Generic
- Data.Semigroup
- Data.Semigroup.First
- Data.Semigroup.Foldable
- Data.Semigroup.Generic
- Data.Semigroup.Last
- Data.Semigroup.Traversable
- Data.Semiring
- Data.Semiring.Free
- Data.Semiring.Generic
- Data.Sequence
- Data.Sequence.Internal
- Data.Sequence.NonEmpty
- Data.Sequence.Ordered
- Data.Set
- Data.Set.NonEmpty
- Data.Show
- Data.Show.Generic
- Data.String
- Data.String.CaseInsensitive
- Data.String.CodePoints
- Data.String.CodeUnits
- Data.String.Common
- Data.String.Gen
- Data.String.NonEmpty
- Data.String.NonEmpty.CaseInsensitive
- Data.String.NonEmpty.CodePoints
- Data.String.NonEmpty.CodeUnits
- Data.String.NonEmpty.Internal
- Data.String.Pattern
- Data.String.Regex
- Data.String.Regex.Flags
- Data.String.Regex.Unsafe
- Data.String.Unicode
- Data.String.Unsafe
- Data.Symbol
- Data.These
- Data.These.Gen
- Data.Time
- Data.Time.Component
- Data.Time.Component.Gen
- Data.Time.Duration
- Data.Time.Duration.Gen
- Data.Time.Gen
- Data.Traversable
- Data.Traversable.Accum
- Data.Traversable.Accum.Internal
- Data.TraversableWithIndex
- Data.Tuple
- Data.Tuple.Nested
- Data.Undefinable
- Data.Unfoldable
- Data.Unfoldable1
- Data.Unit
- Data.Validation.Semigroup
- Data.Validation.Semiring
- Data.Variant
- Data.Variant.Internal
- Data.Void
- Data.Witherable
- Data.Yoneda
- Debug
- Effect
- Effect.Class
- Effect.Class.Console
- Effect.Console
- Effect.Exception
- Effect.Exception.Unsafe
- Effect.Random
- Effect.Ref
- Effect.Uncurried
- Effect.Unsafe
- Erl.Atom
- Erl.Atom.Symbol
- Erl.Cowboy
- Erl.Cowboy.Handler
- Erl.Cowboy.Handlers.Common
- Erl.Cowboy.Handlers.Loop
- Erl.Cowboy.Handlers.Rest
- Erl.Cowboy.Handlers.Simple
- Erl.Cowboy.Handlers.WebSocket
- Erl.Cowboy.Req
- Erl.Cowboy.Req.Monad
- Erl.Cowboy.Routes
- Erl.Data.Binary
- Erl.Data.Binary.IOData
- Erl.Data.Binary.IOList
- Erl.Data.Binary.Type
- Erl.Data.Binary.UTF16
- Erl.Data.Binary.UTF32
- Erl.Data.Binary.UTF8
- Erl.Data.Bitstring
- Erl.Data.Bitstring.Type
- Erl.Data.Jsone
- Erl.Data.Jsone.Decode
- Erl.Data.Jsone.Decode.Class
- Erl.Data.Jsone.Decode.Combinators
- Erl.Data.Jsone.Encode
- Erl.Data.Jsone.Encode.Class
- Erl.Data.Jsone.Encode.Combinators
- Erl.Data.Jsone.Parser
- Erl.Data.Jsone.Printer
- Erl.Data.List
- Erl.Data.List.NonEmpty
- Erl.Data.List.Types
- Erl.Data.Map
- Erl.Data.Queue
- Erl.Data.Queue.Types
- Erl.Data.Tuple
- Erl.File
- Erl.FileLib
- Erl.Gun
- Erl.Gun.WsGun
- Erl.Kernel.Application
- Erl.Kernel.Erlang
- Erl.Kernel.Ets
- Erl.Kernel.Exceptions
- Erl.Kernel.File
- Erl.Kernel.Inet
- Erl.Kernel.Os
- Erl.Kernel.Tcp
- Erl.Kernel.Time
- Erl.Kernel.Udp
- Erl.ModuleName
- Erl.ModuleName.Symbol
- Erl.Otp.Types.Crypto
- Erl.Otp.Types.PublicKey
- Erl.Otp.Types.Stdlib
- Erl.Process
- Erl.Process.Raw
- Erl.Ranch
- Erl.Ranch.Transport
- Erl.Ssl
- Erl.StandardResult
- Erl.Test.EUnit
- Erl.Tests.EUnit.Discovery
- Erl.Types
- Erl.Untagged.Union
- ExpectInferred
- Foreign
- Foreign.Index
- Foreign.Keys
- Heterogeneous.Folding
- Heterogeneous.Mapping
- JSURI
- Lager
- Logger
- Math
- NativeRef
- OpenTelemetry
- OpenTelemetry.Metrics
- OpenTelemetry.Metrics.Counter
- OpenTelemetry.Metrics.Meter
- OpenTelemetry.Metrics.SumObserver
- OpenTelemetry.Metrics.UpDownCounter
- OpenTelemetry.Metrics.UpDownSumObserver
- OpenTelemetry.Metrics.ValueObserver
- OpenTelemetry.Metrics.ValueRecorder
- OpenTelemetry.Tracing
- OpenTelemetry.Tracing.Baggage
- OpenTelemetry.Tracing.Ctx
- OpenTelemetry.Tracing.Propagator.TextMap
- OpenTelemetry.Tracing.Span
- OpenTelemetry.Tracing.Tracer
- PSCI.Support
- Partial
- Partial.Unsafe
- Pathy
- Pathy.Gen
- Pathy.Name
- Pathy.Parser
- Pathy.Path
- Pathy.Phantom
- Pathy.Printer
- Pathy.Sandboxed
- Pinto
- Pinto.App
- Pinto.GenServer
- Pinto.GenStatem
- Pinto.MessageRouting
- Pinto.ModuleNames
- Pinto.Monitor
- Pinto.Supervisor
- Pinto.Supervisor.SimpleOneForOne
- Pinto.Timer
- Pinto.Types
- Prelude
- Prim
- Prim.Boolean
- Prim.Coerce
- Prim.Int
- Prim.Ordering
- Prim.Row
- Prim.RowList
- Prim.Symbol
- Prim.TypeError
- PureScript.Metadata
- Random.LCG
- Record
- Record.Builder
- Record.Prefix
- Record.Unsafe
- Record.Unsafe.Union
- Routing.Duplex
- Routing.Duplex.Generic
- Routing.Duplex.Generic.Syntax
- Routing.Duplex.Parser
- Routing.Duplex.Printer
- Routing.Duplex.Types
- RoutingDuplexMiddleware
- Safe.Coerce
- Simple.JSON
- Simple.JSON.Generics
- Simple.JSON.Generics.EnumSumRep
- Simple.JSON.Generics.TaggedSumRep
- Simple.JSON.Generics.UntaggedProductRep
- Simple.JSON.Generics.UntaggedSumRep
- SimpleBus
- Stetson
- Stetson.HandlerProxy
- Stetson.Loop
- Stetson.ModuleNames
- Stetson.Rest
- Stetson.Routing
- Stetson.Types
- Stetson.Utils
- Stetson.WebSocket
- Test.Assert
- Test.QuickCheck
- Test.QuickCheck.Arbitrary
- Test.QuickCheck.Gen
- Test.QuickCheck.Laws
- Test.QuickCheck.Laws.Control
- Test.QuickCheck.Laws.Control.Align
- Test.QuickCheck.Laws.Control.Alignable
- Test.QuickCheck.Laws.Control.Alt
- Test.QuickCheck.Laws.Control.Alternative
- Test.QuickCheck.Laws.Control.Applicative
- Test.QuickCheck.Laws.Control.Apply
- Test.QuickCheck.Laws.Control.Bind
- Test.QuickCheck.Laws.Control.Category
- Test.QuickCheck.Laws.Control.Comonad
- Test.QuickCheck.Laws.Control.Crosswalk
- Test.QuickCheck.Laws.Control.Extend
- Test.QuickCheck.Laws.Control.Monad
- Test.QuickCheck.Laws.Control.MonadPlus
- Test.QuickCheck.Laws.Control.MonadZero
- Test.QuickCheck.Laws.Control.Plus
- Test.QuickCheck.Laws.Control.Semigroupoid
- Test.QuickCheck.Laws.Data
- Test.QuickCheck.Laws.Data.BooleanAlgebra
- Test.QuickCheck.Laws.Data.Bounded
- Test.QuickCheck.Laws.Data.BoundedEnum
- Test.QuickCheck.Laws.Data.CommutativeRing
- Test.QuickCheck.Laws.Data.DivisionRing
- Test.QuickCheck.Laws.Data.Eq
- Test.QuickCheck.Laws.Data.EuclideanRing
- Test.QuickCheck.Laws.Data.Field
- Test.QuickCheck.Laws.Data.Foldable
- Test.QuickCheck.Laws.Data.Functor
- Test.QuickCheck.Laws.Data.FunctorWithIndex
- Test.QuickCheck.Laws.Data.HeytingAlgebra
- Test.QuickCheck.Laws.Data.Monoid
- Test.QuickCheck.Laws.Data.Ord
- Test.QuickCheck.Laws.Data.Ring
- Test.QuickCheck.Laws.Data.Semigroup
- Test.QuickCheck.Laws.Data.Semiring
- Text.Parsing.Indent
- Text.Parsing.Parser
- Text.Parsing.Parser.Combinators
- Text.Parsing.Parser.Expr
- Text.Parsing.Parser.Language
- Text.Parsing.Parser.Pos
- Text.Parsing.Parser.String
- Text.Parsing.Parser.Token
- Tracing.Attributes
- Type.Data.Boolean
- Type.Data.Ordering
- Type.Data.Row
- Type.Data.RowList
- Type.Data.Symbol
- Type.Equality
- Type.Function
- Type.Prelude
- Type.Proxy
- Type.Row
- Type.Row.Homogeneous
- Type.RowList
- URI
- URI.AbsoluteURI
- URI.Authority
- URI.Common
- URI.Extra.MultiHostPortPair
- URI.Extra.QueryPairs
- URI.Extra.UserPassInfo
- URI.Fragment
- URI.HierarchicalPart
- URI.Host
- URI.Host.Gen
- URI.Host.IPv4Address
- URI.Host.IPv6Address
- URI.Host.RegName
- URI.HostPortPair
- URI.HostPortPair.Gen
- URI.Path
- URI.Path.Absolute
- URI.Path.NoScheme
- URI.Path.Rootless
- URI.Path.Segment
- URI.Port
- URI.Port.Gen
- URI.Query
- URI.RelativePart
- URI.RelativeRef
- URI.Scheme
- URI.Scheme.Common
- URI.URI
- URI.URIRef
- URI.UserInfo
- Unsafe.Coerce
- Unsafe.Reference