Щодо мов, які легко підтримують каррінг та часткове застосування, існує одна переконлива серія аргументів, що походить від Кріса Окасакі:
- Поставте структуру даних як останній аргумент
Чому? Потім ви можете красиво складати операції з даними . Напр insert 1 $ insert 2 $ insert 3 $ s
. Це також допомагає для функцій на стан .
Стандартні бібліотеки, такі як "контейнери", дотримуються цієї угоди .
Іноді наводяться альтернативні аргументи, щоб поставити структуру даних на перше місце, тому її можна закрити, отримуючи функції у статичній структурі (наприклад, пошук), які є дещо лаконічнішими. Однак, здається, широкий консенсус полягає в тому, що це менший виграш, тим більше, що він штовхає вас до коду, що входить у дужки.
- Поставте найрізноманітніший аргумент останнім
Для рекурсивних функцій загальноприйнятим ставити аргумент, який найбільше змінюється (наприклад, акумулятор), як останній аргумент, тоді як аргумент, який змінюється найменше (наприклад, аргумент функції), на початку. Це добре складається з останнім стилем структури даних.
Короткий зміст подання Окасакі наведено в його бібліотеці Едісона (знову ж таки, інша бібліотека структури даних):
- Часткове застосування : аргументи, які, швидше за все, є статичними, зазвичай з’являються перед іншими аргументами, щоб полегшити часткове застосування.
- Колекція відображається останньою : у всіх випадках, коли операція запитує одну колекцію або модифікує існуючу колекцію, аргумент колекції відображатиметься останнім. Це щось на зразок фактичного стандарту для бібліотек структури даних Haskell і надає певний рівень узгодженості API.
- Найбільш звичний порядок : коли операція представляє добре відому математичну функцію в декількох структурах даних, аргументи вибираються таким чином, щоб відповідати найбільш звичному порядку аргументів для функції.