$ -deepseq -template-haskell
Application operator. This operator is redundant, since ordinary application (f x) means the same as (f $ x). However, $ has low, right-associative binding precedence, so it sometimes allows parentheses to be omitted; for example:
> f $ g $ h x = f (g (h x))
It is also useful in higher-order situations, such as map ($ 0) xs, or Data.List.zipWith ($) fs xs.
Strict (call-by-value) application, defined in terms of seq.
Above, except that if the last line of the first argument stops at least one position before the first line of the second begins, these two lines are overlapped. For example:
> text "hi" $$ nest 5 (text "there")
lays out as
> hi there
$$ is associative, with identity empty, and also satisfies
* (x $$ y) <> z = x $$ (y <> z), if y non-empty.
Above, with no overlapping. $+$ is associative, with identity empty.
A variant of $= which is strict in the value to be set.
Sequential function application. The argument is evaluated using the given strategy before it is given to the function.
Parallel function application. The argument is evaluated using the given strategy, in parallel with the function application.
A modificator convenience function, transforming the contents of a state variable with a given funtion.
A variant of $~ which is strict in the transformed value.
Replace all locations in the input with the same value. The default definition is fmap . const, but this may be overridden with a more efficient version.
An infix synonym for fmap.
The expression f <$$> p creates a fresh permutation parser consisting of parser p. The the final result of the permutation parser is the function f applied to the return value of p. The parser p is not allowed to accept empty input - use the optional combinator (<$?>) instead.
If the function f takes more than one parameter, the type variable b is instantiated to a functional type which combines nicely with the adds parser p to the (<||>) combinator. This results in stylized code permutation parser starts with a combining function f followed by the parsers. The function f gets its parameters in the order in which the parsers are specified, but actual input can be in any order.
The expression f <$?> (x,p) creates a fresh permutation parser consisting of parser p. The the final result of the permutation parser is the function f applied to the return value of p. The parser p is optional - if it can not be applied, the default value x will be used instead.
A fmap-like operator for builder primitives, both bounded and fixed size.
Builder primitives are contravariant so it's like the normal fmap, but backwards (look at the type). (If it helps to remember, the operator symbol is like ($) but backwards.)
We can use it for example to prepend and/or append fixed values to an primitive.
> showEncoding ((\x -> ('\'', (x, '\''))) >$< fixed3) 'x' = "'x'"
> fixed3 = char7 >*< char7 >*< char7
Note that the rather verbose syntax for composition stems from the requirement to be able to compute the size / size bound at compile time.