2016-09-01 2 views
2

Par exemple:Que signifient les crochets dans une déclaration de type?

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

Qu'est-[TestField] représentent?

+3

Liste des 'TestField'. – Alec

+0

Ah c'est logique. Je ne me suis pas rendu compte que vous pouviez avoir un type "additionnel" après "IO"! –

+2

Ce n'est pas vraiment additionnel; '[]' est un constructeur de type de type '* -> *' comme 'IO'; c'est juste que vous pouvez écrire '[t]' au lieu de '[] t'. – chepner

Répondre

3

En termes simples, une IO [TestField] est une liste de TestField s dans une monade IO.

Cependant, une description plus correcte est que c'est une action E/S dont le résultat est de type [TestField] (puisque la valeur résultante n'est obtenue qu'après l'exécution de l'E/S).

Vous pouvez en apprendre davantage sur ceux des sources suivantes:

Haskell Hierarchical Libraries - The IO Monad

LYAH - An intro to lists

+3

Bien, bien que j'éviterais de dire que 'IO X' est" un 'X' dans une monade" IO' ". C'est en fait une action _an 'IO' dont le résultat est de type' X'_. Donc, si vous exécutez cette action, vous obtiendrez la valeur «X», mais cela ne signifie pas que l'action contenait un «X» au début. Donc pour l'exemple donné: 'IO [TestField]' est une action 'IO' dont le résultat est une liste de' TestField's. – leftaroundabout

+0

Vous avez raison, j'ai ajouté cette information à la réponse. – ljedrz