T4 是 C#/VB.NET 的“官方”代码生成引擎。但是F# 不支持它(这是从四月开始的,但我找不到任何更新的提及)。那么生成 F# 代码的好方法是什么?
编辑:
我想在 F#中实现2-3 个手指树。我已经在 C# 中实现了它们,所以这应该是一个很好的比较。树的“数字”和节点可以表示为数组,所以
type 't FingerTree = Empty | Single of 't | Deep of 't array * (('t FingerTree) array) lazy * 't array
但是,这些数组的最大大小非常小,所以最好有
type 't Digit = Digit1 of 't | Digit2 of 't*'t | Digit3 of 't*'t*'t | Digit4 of 't*'t*'t*'t
type 't Node = Node2 of 't FingerTree * 't FingerTree | Node3 of 't FingerTree * 't FingerTree * 't FingerTree
type 't FingerTree = Empty | Single of 't | Deep of 't Digit * ('t Node) lazy * 't Digit
避免边界检查等。
但随后在 Digit 和 Node 上手动编写所有函数变得更加困难,最好生成它们。类似 T4 的方法看起来非常适合它......