2016-09-01 171 views
2

例如:方括号在类型声明中的含义是什么?

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

是什么[TestField]代表什么?

+3

TestField'的'名单。 – Alec

+0

啊,这是有道理的。我没有意识到你可以在'IO'之后有'额外'类型! –

+2

这不是真的另外; ''''''就像'IO'一样,''''''''''''是类型构造器。只是你可以写''t''而不是'[] t'。 – chepner

回答

3

简而言之,IO [TestField]是在IO monad中的TestField s的列表。

但是,更正确的描述是,它是IO操作,其结果的类型为[TestField](因为结果值仅在执行IO后获得)。

您可以了解到更多关于在以下来源:

Haskell Hierarchical Libraries - The IO Monad

LYAH - An intro to lists

+3

没错,尽管我会避免说'IO X'是'IO' monad中的'X'。它实际上是_an'IO'动作,其结果的类型为'X'_。所以,如果你执行那个动作,你会得到'X'值,但这并不意味着动作开始时包含一个'X'。因此,对于给定的示例:'IO [TestField]'是一个'IO'动作,其结果是'TestField'列表。 – leftaroundabout

+0

你说得对,我将这些信息添加到答案中。 – ljedrz

相关问题