gpt4 book ai didi

haskell - 如何内省(introspection) Haskell 文件以获取其定义的类型

转载 作者:行者123 更新时间:2023-12-03 06:23:15 24 4
gpt4 key购买 nike

我有很多文件必须自动处理。每个文件保存一名学生对练习的回答,该练习要求学生在给定每个函数类型的情况下给出某些函数的定义。

我的想法是有一个 Haskell 脚本来加载每个学生文件,并验证每个函数是否具有预期的类型。

一个限制是学生文件未定义为模块。

我该怎么做?

到目前为止,我最好的选择是生成一个 GHCi 进程,该进程将使用 GHCi 命令从“测试文件”读取标准输入,例如:

:load student1.hs
:t g
... and so on ...

然后解析 GHCi 返回的输出以查找学生文件中函数的类型。

是否有另一种干净的方法来加载任意 Haskell 文件并内省(introspection)其代码?

谢谢

最佳答案

Haskell 不会在运行时保存类型信息。在 Haskell 中,类型用于静态分析阶段的运行前类型检查,并在稍后被删除。您可以阅读有关 Haskell 类型系统的更多信息 here .

您是否有理由想在运行时了解函数的类型?也许我们可以帮助解决问题本身:)

根据第二次编辑进行编辑:

我没有给你一个好的解决方案,但这里有一个可能可行的想法:

运行一个脚本,对于每个学生模块将:

  1. 获取模块的名称并生成文件Test.hs:

module Test where

import [module-name]

test :: a -> b -> [(b,a)]
test = g
  • 运行ghc -fno-code Test.hs
  • 检查输出不包含类型错误
  • 将结果写入日志文件
  • 关于haskell - 如何内省(introspection) Haskell 文件以获取其定义的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33167426/

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