如何在Standard ML中打印多态值?

时间:2009-03-30 02:01:08

标签: functional-programming polymorphism printing sml

有没有办法在Standard ML(特别是SML / NJ)中打印多态值?我有一个多态函数,它没有做我想要的,并且由于在SML中调试的糟糕状态(参见Any real world experience debugging a production functional program?),我希望看到它正在用一些好的'{{1 }}的。一个简单的例子是(提示):

print

赞赏其他建议。与此同时,我会一直盯着有问题的代码提交。

更新

我能够找到这个错误,但问题仍然是希望能够预防未来的痛苦和痛苦。

2 个答案:

答案 0 :(得分:8)

不,没有办法打印多态值。 你有两个选择:

  • 将您的函数专门化为可以打印的整数或字符串。然后当虫子被杀时,再次使它变成多态。

  • 如果错误仅在其他实例化中显示,请将show作为附加参数传递给您的函数。例如,如果您的多态函数具有类型

    'a list -> 'a list
    

    将类型扩展为

    ('a -> string) -> 'a list -> 'a list
    

    您在内部使用show进行打印,然后通过将该功能部分应用于合适的show,您可以获得可在原始上下文中使用的版本。

    这很乏味但确实有帮助。 (但要注意:它可能会让你尝试Haskell。)

答案 1 :(得分:0)

仅限MOSML :仅用于调试目的,请使用printVal功能。请注意,此功能仅在顶级模式下可用,当您尝试编译程序时会导致错误。

编辑:在这种情况下,我担心没有通用的解决方案,您需要将值明确地转换为字符串,然后打印它们。请参阅其他答案以获得好的建议。