Walczę z notacją podpisu typu F #. Na przykład załóżmy, że masz Fold funkcję:Jak odczytać podpisy typu F #?
let rec Fold combine acc l =
...
które mogą mieć tego typu podpis:
('a -> 'b -> 'a) -> 'a -> list<'b> -> 'a
które czytałem jako
funkcję, która ma trzy argumenty:
- Funkcja, która pobiera "a, a 'b i zwraca a'
- 'a
- listę' b
i zwraca „a.
Ale wtedy byłoby bardziej sensowne dla mojego jaskiniowcy mózg do wyrażania go jako
('a, 'b -> 'a), 'a, list<'b> -> 'a
Jestem pewien, że istnieje powód, dlaczego semantyczny parametry są rozdzielone ze strzałką dokładnie tak samo jak funkcja typ zwrotu, ale jakoś go brakuje i nie znalazłem dotąd jasnego wyjaśnienia w książkach/artykułach. Za każdym razem, gdy widzę podpis typu, muszę poświęcić mu trochę czasu, aby go zrozumieć. Czuję, że po prostu tę małą część układanki, która sprawia, że "odszyfrowywanie" jest oczywiste.
Czy ktoś może mnie oświecić?
Jasne wyjaśnienie, dzięki. Po przeczytaniu tego zastanawiam się, jak go wcześniej nie widziałem ... –
Nie sądzę, że to jest powód, dla którego używamy notacji strzałkowej (w typach). Wszakże w rachunku lambda używamy "->" w składni typów, ale "." w składni terminów. [Może oczywiście być prawdą, że używamy -> w terminach w F #, ponieważ używamy -> w typach i. został już zabrany.] – petebu