Как сгенерировать сигнатуру типа F #, похожую на FSI в моем собственном коде? - PullRequest
11 голосов
/ 28 марта 2012

Если используется интерактивная оболочка F # (FSI), выводимый тип выражения ( подпись ) выводится на консоль вместе со значением:

val it : int * string * float = (42, "Hello F#", 42.0)

Как мне подражатьтакое же поведение в моем собственном коде, например, чтобы получить выведенные типы в виде строки для выражения F #?

Мне не нужно динамически оценивать любые выражения F #, выражения известны во время компиляции и являются частьюмой (статический) F # код.Мне нужна эта функция, чтобы иметь возможность имитировать вывод FSI в LINQPad для моих демонстраций F #.

Ответы [ 2 ]

11 голосов
/ 31 марта 2012

Использование Unquote

Unquote имеет средство для получения подписи F # типа. Просто скачайте последнюю версию и добавьте ссылку через LINQPad в Unquote.dll, тогда вы можете сделать, например,

enter image description here

Если вам интересно, вы можете использовать исходный код для реализации расширения FSharpName Type: http://code.google.com/p/unquote/source/browse/tags/2.1.0/Unquote/ExtraReflection.fs#54.

Использование FsEye

Другой аккуратный подход - использовать бета-версию Custom Visualizer API LINQPad для встраивания FsEye в LINQPad (FsEye использует тот же алгоритм печати подписи типа F #, что и Unquote). Это также очень просто, все, что вам нужно сделать, это загрузить LINQPad beta , загрузить и ссылаться на FsEye.dll из последней версии FsEye, затем вы можете сделать, например,

enter image description here

1 голос
/ 28 марта 2012

Если вы посмотрите на код компилятора F # и увидите, как компилятор обрабатывает опцию --sig, я думаю, это даст вам то, что вы ищете.Подробнее о параметре --sig и подписях здесь:

Подписи (F #)

...