如何在我自己的代码中生成类似于FSI的F#类型签名?

Ale*_*kin 11 f# type-inference linqpad f#-interactive

如果使用F#Interactive Shell(FSI),则推断的表达式类型(签名)将与其值一起打印到控制台:

val it : int * string * float = (42, "Hello F#", 42.0)
Run Code Online (Sandbox Code Playgroud)

如何在我自己的代码中模仿相同的行为,例如将推断的类型作为F#表达式的字符串?

我不需要动态评估任何F#表达式,这些表达式在编译时是已知的,并且是我的(静态)F#代码的一部分.我需要这个功能才能在我的F#演示中模仿LINQPad中的FSI输出.

Ste*_*sen 11

使用Unquote

Unquote有一个获取类型的F#签名的工具.只需下载最新版本并通过LINQPad添加引用到Unquote.dll,然后你可以做到例如

在此输入图像描述

如果您有兴趣,可以使用源代码来实现FSharpName Type扩展程序:http://code.google.com/p/unquote/source/browse/tags/2.1.0/Unquote/ExtraReflection.fs# 54.

使用FsEye

另一个简洁的方法是使用LINQPad的beta Custom Visualizer API将FsEye嵌入到LINQPad中(FsEye使用与Unquote相同的F#类型签名打印算法).这也很简单,你需要做的就是从最新版本的FsEye 下载LINQPad beta,下载并参考FsEye.dll,然后你可以做到例如

在此输入图像描述