【问题标题】:What do square brackets mean in a type declaration?类型声明中的方括号是什么意思?
【发布时间】:2017-01-09 21:23:38
【问题描述】:

例如:

 r <- query_ conn "SELECT * from test" :: IO [TestField]

[TestField] 代表什么?

【问题讨论】:

  • TestField列表。
  • 嗯,有道理。我没有意识到你可以在IO 之后添加一个“附加”类型!
  • 这并不是真正的额外; [] 是一种 * -&gt; * 的类型构造函数,就像 IO 一样;只是你可以写[t]而不是[] t
  • 如果您查看the prelude,它会声明IO a,所以IO 总是有一个附加类型...有时它只是单元类型:IO ()

标签: list haskell types io


【解决方案1】:

简单地说,IO [TestField]TestFields 在IO monad 中的列表。

但是,更正确的描述是它是一个IO动作,其结果的类型为[TestField](因为只有在执行IO之后才能获得结果值)。

您可以通过以下来源了解更多信息:

Haskell Hierarchical Libraries - The IO Monad

LYAH - An intro to lists

【讨论】:

  • 对,虽然我会避免说 IO X 是“X in an IO monad”。它实际上是一个IO 动作,其结果类型为X。因此,如果您执行该操作,您将获得X 值,但这并不意味着该操作在开始时包含X。因此,对于给定的示例:IO [TestField] 是一个 IO 操作,其结果是 TestFields 的列表。
  • 你说得对,我在答案中添加了这些信息。
猜你喜欢
  • 1970-01-01
  • 2022-01-02
  • 2010-09-19
  • 1970-01-01
  • 2022-06-19
  • 1970-01-01
  • 2014-08-27
  • 1970-01-01
  • 2021-03-17
相关资源
最近更新 更多