How to dictate a thin arrow for return types and PHP access
Say “thin arrow” or “dash arrow” to produce ->, spaced on both sides, so “func total thin arrow int” assembles as func total -> int. The qualifier is required: saying only “arrow” gives you the fat arrow instead, because the unqualified word belongs to => in the table.
A fourteen-word typed signature costs about 16 seconds on the keyboard against about 5.1 seconds aloud. (sources: Dhakal, Feit, Kristensson & Oulasvirta, “Observations on Typing from 136 Million Keystrokes”, CHI 2018, 168,000 participants, 136 million keystrokes; Yuan, Liberman & Cieri, “Towards an Integrated Understanding of Speaking Rate in Conversation”, Interspeech 2006, 2,438 American English telephone conversations (Switchboard corpus). The speech figure is conversational rate, not a measured dictation rate — no such measurement exists.)
fn parse_config(path: and str) -> ResultThis tool runs entirely in your browser. Nothing you type is sent anywhere, stored, or logged.
Step by step
- 1
Say the signature up to the return
Speak the function name and parameter list first, then “thin arrow”, then the return type. The operator keeps spaces on both sides, matching Rust and Swift formatting.
- 2
Always include the qualifier
Say “thin arrow” or “dash arrow” in full every time. The bare word “arrow” is an alias for the fat arrow, and getting the wrong one produces code that usually still parses.
- 3
Reuse it for PHP member access
Say “thin arrow” between the object and the member. VoiceGem emits the same two characters regardless of language, so PHP access and a Rust return type are dictated identically.
- 4
By hand
Press the hyphen then Shift-period. PHP developers hit this thousands of times a day, which is why the operator is worth having a reliable phrase for.
The thin arrow needs a qualifier and the fat arrow does not
Asymmetry in the alias list is a deliberate cost. “Arrow”, “fat arrow” reach =>, while -> requires “thin arrow” or “dash arrow” — so the shorter reflex belongs to the JavaScript operator and everyone else pays two extra syllables.
Publishing the whole table is what makes an asymmetry like this workable. The Deterministic Pass is a fixed set of keys and a reader can see every one of them on one page, decide which phrase to learn, and rely on it not changing. A prompt-based formatter cannot offer that guarantee, because its behaviour is a property of a model rather than of a table.
Where doing it by hand breaks down
Two keystrokes for a single arrow is cheap and typing it is the right call in isolation. Nothing about a lone operator needs a dictation workflow.
Typed signatures are the case worth speaking. A Rust function header carries a lifetime-free reference type, a parameter, a return arrow and a generic result, and it is a dense run of punctuation where a mistake shows up as a compile error several lines later. Dictating the header in VoiceGem lands the punctuation in one pass — with the caveat that a generic in the return type comes back spaced and needs a formatter run.
Doing this somewhere else? spoken-symbol reference, on your own input, how the fat arrow works, how the single ampersand works, or the same thing for the asterisk.
Common questions
The unqualified word “arrow” is an alias for the fat arrow in VoiceGem's table. Saying “thin arrow” or “dash arrow” is what reaches the two-character -> operator.
Yes. VoiceGem emits the same characters regardless of language, so PHP member access uses exactly the same phrase as a Rust return type.
Yes. The thin arrow attaches on neither side, which matches how rustfmt and Swift's formatter both lay out a return arrow.
Check both arrow entries in the published table before you commit a phrase to memory.
Open the tool