有没有办法在Standard ML(特别是SML / NJ)中打印多态值?我有一个多态函数,它没有做我想要的,并且由于在SML中调试的糟糕状态(参见Any real world experience debugging a production functional program?),我希望看到它正在用一些好的'{{1 }}的。一个简单的例子是(提示):
print
赞赏其他建议。与此同时,我会一直盯着有问题的代码提交。
我能够找到这个错误,但问题仍然是希望能够预防未来的痛苦和痛苦。
答案 0 :(得分:8)
不,没有办法打印多态值。 你有两个选择:
将您的函数专门化为可以打印的整数或字符串。然后当虫子被杀时,再次使它变成多态。
如果错误仅在其他实例化中显示,请将show
作为附加参数传递给您的函数。例如,如果您的多态函数具有类型
'a list -> 'a list
将类型扩展为
('a -> string) -> 'a list -> 'a list
您在内部使用show
进行打印,然后通过将该功能部分应用于合适的show
,您可以获得可在原始上下文中使用的版本。
这很乏味但确实有帮助。 (但要注意:它可能会让你尝试Haskell。)
答案 1 :(得分:0)
仅限MOSML :仅用于调试目的,请使用printVal
功能。请注意,此功能仅在顶级模式下可用,当您尝试编译程序时会导致错误。
编辑:在这种情况下,我担心没有通用的解决方案,您需要将值明确地转换为字符串,然后打印它们。请参阅其他答案以获得好的建议。