Řekl bych, že když se to používá s mírou, tak to může zlepšit čitelnost.
Třeba operátory @@, >>=, |>.
Pak je otázkou, zda to některé knihovny trošku nepřehánějí. Třeba v F# je knihovna Farkle pro parsování, kde gramatiky lze psát
let expression =
let NEG = obj()
let expression = nonterminal "Expression"
expression.SetProductions(
!@ number |> asIs,
!@ expression .>> "+" .>>. expression => (fun x1 x2 -> x1 + x2),
!@ expression .>> "-" .>>. expression => (fun x1 x2 -> x1 - x2),
!@ expression .>> "*" .>>. expression => (fun x1 x2 -> x1 * x2),
!@ expression .>> "/" .>>. expression => (fun x1 x2 -> x1 / x2),
!& "-" .>>. expression |> prec NEG => (fun x -> -x),
!@ expression .>> "^" .>>. expression => (fun x1 x2 -> Math.Pow(x1, x2)),
// We use |> asIs instead of => (fun x -> x).
!& "(" .>>. expression .>> ")" |> asIs
)
let opScope =
OperatorScope(
LeftAssociative("+", "-"),
LeftAssociative("*", "/"),
PrecedenceOnly(NEG),
RightAssociative("^")
)
DesigntimeFarkle.withOperatorScope opScope expression
Cílem je, aby se to podobalo následujícímu zápisu z Bisonu:
%left '-' '+'
%left '*' '/'
%precedence NEG
%right '^'
exp:
NUM
| exp '+' exp { $$ = $1 + $3; }
| exp '-' exp { $$ = $1 - $3; }
| exp '*' exp { $$ = $1 * $3; }
| exp '/' exp { $$ = $1 / $3; }
| '-' exp %prec NEG { $$ = -$2; }
| exp '^' exp { $$ = pow ($1, $3); }
| '(' exp ')' { $$ = $2; }
;