在F#中使用Roslyn

Rsh*_*Rsh 9 compiler-construction f# functional-programming roslyn

由于Roslyn的语法树是不可变的,并且使用编译器基本上都是关于转换(这正是函数式编程擅长的),我认为在F#中使用Roslyn可能是一个好主意.
那么,将Roslyn和F#结合起来是否可行?有人曾尝试过吗?它比使用C#有什么优势吗?如果可能的话,我是否值得开始学习F#?

PS:我在使用Scheme进行函数式编程方面有一些经验,我目前正在学习Haskell,但我还没有尝过F#.

pad*_*pad 14

我以为自己在F#中使用Roslyn可能是一个好主意.

这绝对是一个好主意.有些人想知道为什么Roslyn没有用F#编写,因为这种语言非常适合编写编译器(参见http://neildanson.wordpress.com/2012/12/24/the-roslyn-incident/以供参考).

一旦定义了一组可组合的活动模式,就很容易在Roslyn AST上进行模式匹配.请参阅https://gist.github.com/jbevain/01a083c07010bc7b7cd0作为一个令人信服的例子.由于Roslyn AST是不可变的,您还可以创建组合器,以便根据您的目的对其进行转换.如果目标是再次吐出C#AST,则可以将受歧视的联合用作直接数据类型.

使用F#的缺点是您在F#中找不到使用Roslyn API的许多完整示例.我们有一个粗略的计划将Roslyn集成Visual F#Power Tools中.假设你有一个混合的C#/ F#解决方案; 如果你想从F#项目转到C#符号的定义,需要Roslyn为此目的处理C#代码.但是,这需要大量的工作; 我不知道是否有人在研究它.