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?
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?
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:
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
Vous avez raison, j'ai ajouté cette information à la réponse. – ljedrz
Liste des 'TestField'. – Alec
Ah c'est logique. Je ne me suis pas rendu compte que vous pouviez avoir un type "additionnel" après "IO"! –
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