W przypadku języków, które obsługują curry i łatwe częściowe stosowanie, istnieje jedna przekonująca seria argumentów, oryginalnie od Chrisa Okasakiego:
- Jako ostatni argument umieść strukturę danych
Czemu? Następnie możesz ładnie komponować operacje na danych . Np insert 1 $ insert 2 $ insert 3 $ s
. Pomaga to również w funkcjach na stanie .
Standardowe biblioteki, takie jak „kontenery”, są zgodne z tą konwencją .
Czasami podaje się alternatywne argumenty, aby umieścić strukturę danych jako pierwszą, więc można ją zamknąć, uzyskując funkcje na strukturze statycznej (np. Wyszukiwanie), które są nieco bardziej zwięzłe. Wydaje się jednak, że istnieje powszechna zgoda co do tego, że jest to mniej korzystne, zwłaszcza że popycha cię do kodu umieszczonego w nawiasach.
- Najbardziej zróżnicowany argument umieść na końcu
W przypadku funkcji rekurencyjnych często umieszcza się argument, który zmienia się najbardziej (np. Akumulator) jako ostatni argument, podczas gdy argument, który zmienia się najmniej (np. Argument funkcji) na początku. To dobrze komponuje się z ostatnim stylem struktury danych.
Podsumowanie widoku Okasaki znajduje się w jego bibliotece Edisona (znowu, w innej bibliotece struktur danych):
- Częściowe zastosowanie : argumenty z większym prawdopodobieństwem są statyczne zwykle pojawiają się przed innymi argumentami w celu ułatwienia częściowego zastosowania.
- Kolekcja pojawia się jako ostatnia : we wszystkich przypadkach, gdy operacja wysyła zapytanie do pojedynczej kolekcji lub modyfikuje istniejącą kolekcję, argument kolekcji pojawi się jako ostatni. Jest to coś w rodzaju faktycznego standardu dla bibliotek datastruktur Haskell i nadaje pewną spójność API.
- Najbardziej typowa kolejność : gdy operacja reprezentuje dobrze znaną funkcję matematyczną na więcej niż jednej strukturze danych, argumenty są wybierane tak, aby pasowały do najczęściej stosowanej kolejności argumentów funkcji.