gpt4 book ai didi

debugging - Haskell:是否可以将类型作为程序的一部分输出?

转载 作者:行者123 更新时间:2023-12-04 01:03:04 39 4
gpt4 key购买 nike

为了帮助在 Haskell 中调试和编写程序,我正在考虑 Haskell 程序输出变量类型作为程序一部分的能力。例如,我有以下代码:

listHEADFiles :: ReaderT LgRepo IO ()
listHEADFiles = do
ref <- resolveReference $ T.pack "HEAD"
case ref of
Nothing -> fail "Could not resolve reference named 'HEAD'"
Just reference -> do
obj <- lookupObject reference
case obj of
CommitObj commit -> do
objects <- listAllObjects Nothing (commitOid commit)
for_ objects (\case
TreeObjOid toOid -> do
tree <- lookupTree toOid
treeEntries <- sourceTreeEntries tree
entries <- lift $ treeEntries
outputTypeOf entries
)
_ -> fail "'HEAD' is not a commit object"

我想输出变量 entries 的类型,因为我无法理解提升值后到底发生了什么。我可以查看文档,但手动计算它总是让我感到困惑。我想确定我的程序执行时它是什么类型。换句话说,我希望 ghci 中的 :t 功能成为我程序的一部分。可能吗?

最佳答案

你并不真的希望你的程序输出一个类型:你希望编译器在编译你的程序时输出一个类型。您要查找的功能是 Partial type signatures .这个想法是你在表达式上放置一个不完整的签名,然后你得到一个编译器“错误”告诉​​你如何填充空白。如果您完全不知道类型,可接受的不完整签名只是 _:

(entries :: _) <- lift $ treeEntries

关于debugging - Haskell:是否可以将类型作为程序的一部分输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67540348/

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