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

老化

为了帮助在 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因为我无法理解提升值后究竟发生了什么。我可以查看文档,但手动计算它总是让我感到困惑。我想确定我的程序执行时它是什么类型。换句话说,我希望将:tin 的功能ghci作为程序的一部分。是否可以?

合金

你真的不希望你的程序输出一个类型:你希望编译器在编译你的程序时输出一个类型。您正在寻找的功能是Partial type signatures这个想法是你在一个表达式上加上一个不完整的签名,你会得到一个编译器“错误”,告诉你如何填空。如果您完全不知道类型,可接受的不完整签名将是_

(entries :: _) <- lift $ treeEntries

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

是否可以使用 xpath 将 $ 作为属性名称的一部分

Active Directory:是否可以将 Computer$ 帐户作为组的一部分(例如 USERS 组的一部分)

将输出文本作为命令按钮的一部分

Javascript将HTML标签作为innerHTML输出到屏幕的一部分

在Haskell中,是否可以限定导入模块的一部分?

是否可以延迟对作为函数调用一部分的表达式的求值?

代码可以独立运行,但不能作为整个程序的一部分

将标题作为CURL的一部分

是否可以将向量的一部分作为向量发送给函数?

是否可以将物理物体仅定位到Sprite的一部分?

是否可以将 AZURE 应用服务定义为 VNET 的一部分?

是否可以将一部分PHP代码放在<script>中?

是否可以在`ps -Af`后面附加`-o`选项以显示例如UID / GID作为输出的一部分?

将某些内容作为路径的一部分和参数作为参数是否等效?

将中间输出分配给temp变量作为dplyr管道的一部分

是否可以在不使用Room DB的情况下使用Paging(作为android jetpack的一部分)?

将元素添加到列表中,该列表是 Haskell 中类型的一部分

我可以将数据管道作为我的云形成模板的一部分吗?

回送是否将数据库的索引作为元数据的一部分提供?

Angular-如何将应用程序的一部分作为辅助独立版本输出

打印“ \ n”或换行符作为终端输出的一部分

Django序列化器输出作为JSON对象的一部分

Haskell:为什么(+),(-)是Num类型类的一部分?

是否可以同时指定模板类的一部分?(在“ <<”之前和“ <>”内部的部分)

Hadoop MapReduce:是否可以仅将一部分输入数据用作MR作业的输入?

是否可以仅将视图控制器的一部分嵌入容器视图中?

是否可以将Ektron智能表单的一部分限制为特定的用户组?

联合而不是aligned_storage_t作为容器节点类型的一部分

使用抽象模块作为类型定义的一部分,与模块分开