gpt4 book ai didi

haskell - 将表达式转换为在 haskell 脚本中描述其类型的字符串?

转载 作者:行者123 更新时间:2023-12-02 17:06:05 28 4
gpt4 key购买 nike

我们都知道 ghci 中的 :t 给出了表达式的类型:

Prelude> :t [1..]
[1..] :: (Enum t, Num t) => [t]

我需要的是 haskell 脚本中 :t 的等价物(我将其称为 typeStr):

main = putStrLn $ typeStr [1..]

可以在屏幕上打印类似 (Enum t, Num t) => [t] 的内容。

这可能吗?

最佳答案

是的,有多种方法。

<强>1。使用动态类型

对于单态类型的简单情况,您可以使用 Typeable 实例:

Data.Dynamic> typeOf [1..]
[Integer]

<强>2。使用运行时评估

但是,要正确执行此操作 - 获取多态值的类型 - 您将需要完整的 GHC 类型检查器。例如。通过 ghc-api 库及其漂亮的包装器,hint :

Language.Haskell.Interpreter> runInterpreter $ typeOf "[1..]"
Right "(P.Enum t, P.Num t) => [t]"

这是使用动态调用的完整 GHC 类型检查器正确推断的类型。

关于haskell - 将表达式转换为在 haskell 脚本中描述其类型的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15052793/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com