【问题标题】:haskell load data from 'script' filehaskell 从“脚本”文件中加载数据
【发布时间】:2018-08-10 12:19:16
【问题描述】:

我一直在阅读“learn you haskell for great good”,在这一部分中:

"让我们在脚本中放入一个代表人的字符串,然后在 GHCi 中加载该脚本:

mysteryDude = "Person { firstName =\"Michael\"" ++
                      ", lastName =\"Diamond\"" ++ 
                      ", age = 43}"

为了提高可读性,我们将字符串写成这样的多行。如果我们想读取那个字符串,我们需要告诉 Haskell 我们期望返回的类型:

ghci> read mysteryDude :: Person

但我不知道如何创建“脚本”,它在mysteryDude.hs 文件中,然后我需要用>:l mysteryDude.hs 加载它 或者是什么。但是我试过了,我得到了这个错误:

*Main> read mysteryDude.hs :: Person

<interactive>:50:23: error:
    Not in scope: type constructor or class ‘Person’
*Main> read mysterDude.hs :: Person

我在网络上看到here,他们更改了它,并且不以相同的方式进行,所以,也许这是一个错误。

但即使在这个例子中是一个错误,我也想知道如何编写一个“脚本”并从中加载数据。

【问题讨论】:

  • 您是否在mysteryDude.hs 中定义了data Person
  • 不,它在另一个文件 person.hs 中
  • mysteryDude.hs 是否导入它?
  • 不...我开始看到问题了

标签: haskell


【解决方案1】:

我从 cmets 推断出这个问题。 ghci 中的 :l 会忘记所有之前的 :ls 以及您在 REPL 中所做的所有定义。您应该:

  • 使文件相互导入(避免导入循环)。文件名和模块名必须匹配。
  • import ghci 中的两个文件。同样,模块名称应与文件名称匹配。
  • 在 REPL 的顶层定义您的所有定义。您可以使用:{ :} 围绕它们的多行 sn-ps。不推荐

【讨论】:

    猜你喜欢
    • 2012-12-31
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 2015-12-04
    • 2016-10-28
    • 2017-08-01
    相关资源
    最近更新 更多