Я думаю, что единственный способ получить функциональность any_to_string - использовать форматтер "% A". Предупреждение говорит вам об этом.
let any_to_string = sprintf "%A"
Это не вызывает .ToString (). Для «простых» типов, таких как списки, .ToString () уже дает хорошее представление. Но при использовании ваших собственных пользовательских типов форматтер% A гораздо более полезен. Например, в случае древовидных структур он идет вдоль дерева.
Если вы хотите вызвать .ToString () для объекта, вы можете использовать форматер '% O'.
Пример:
type Tree = Node of Tree * Tree | Leaf
let myTree = Node(Node(Leaf,Leaf),Node(Leaf,Node(Leaf,Leaf)))
и в FSI:
> myTree.ToString();;
val it : string = "FSI_0002+Tree+Node"
> sprintf "%O" myTree;;
val it : string = "FSI_0002+Tree+Node"
> sprintf "%A" myTree;;
val it : string = "Node (Node (Leaf,Leaf),Node (Leaf,Node (Leaf,Leaf)))"