Запутанное объявление типа? - PullRequest
2 голосов
/ 10 мая 2011

Я некоторое время не работал с SML, и я наткнулся на эту строку кода:

type memory = string -> int;

Определяет ли это «память» как функцию, которая принимает строку, возвращающую int, иличто-то еще целиком?Я искал похожую декларацию, но не могу найти ее или выяснить, что она делает.

Когда я помещаю ее в SML / NJ, я просто получаю это:

- type memory = string -> int;
type memory = string -> int

1 Ответ

8 голосов
/ 10 мая 2011

memory не является функцией, это просто аббревиатура для типа, который является функцией, которая принимает в качестве входных данных строку и возвращает int.Поэтому, когда вы хотите написать что-то типа string->int, вы можете просто написать что-то типа memory.

Например, вместо записи:

- fun foo(f : string->int, s) = f s;
val foo = fn : (string -> int) * string -> int

вы можете написать:

- fun foo( f: memory, s) = f s;
val foo = fn : memory * string -> int

Такие type объявления могут сделать ваш код более читабельным (например, вместо записи, что пара x имеет тип int*int, как (x: int*int), вы можете просто создать сокращение type pair = int*int и затем вы можете написать, что x имеет тип pair, например (x: pair)).

...