What makes a good name for a helper function?

haskell, naming-conventions

Solution

General rules for locally-scoped variable naming.

- `f` , `k`, `g`, `h` for super simple local, semi-anonymous things

- `go` for (tail) recursive helpers (precedent)

- `n` , `m`, `i`, `j` for length and size and other numeric values

- `v` for results of map lookups and other dictionary types

- `s` and `t` for strings.

- `a:as` and `x:xs` and `y:ys` for lists.

- `(a,b,c,_)` for tuple fields.

These generally only apply for arguments to HOFs. For your case, I'd go with something like `k` or `eq3`.

Use apostrophes sparingly, for derived values.

Problem

Consider the following problem: given a list of length three of tuples (String,Int), is there a pair of elements having the same "Int" part? (For example, `[("bob",5),("gertrude",3),("al",5)]` contains such a pair, but `[("bob",5),("gertrude",3),("al",1)]` does not.) This is how I would implement such a function: ``` import Data.List (sortBy) import Data.Function (on) hasPair::[(String,Int)]->Bool hasPair = napkin . sortBy (compare `on` snd) where napkin [(_, a),(_, b),(_, c)] | a == b = True | b == c = True | otherwise = False ``` I've used pattern matching to bind names to the "Int" part of the tuples, but I want to sort first (in order to group like members), so I've put the pattern-matching function inside a `where` clause. But this brings me to my question: what's a good strategy for picking names for functions that live inside `where` clauses? I want to be able to think of such names quickly. For this example, "hasPair" seems like a good choice, but it's already taken! I find that pattern comes up a lot - the natural-seeming name for a helper function is already taken by the outer function that calls it. So I have, at times, called such helper functions things like "op", "foo", and even "helper" - here I have chosen "napkin" to emphasize its use-it-once, throw-it-away nature. So, dear Stackoverflow readers, what would you have called "napkin"? And more importantly, how do you approach this issue in general?

Original source

Related problems