J'ai vu ce type avant sans savoir ce que cela signifie. Ça veut dire quelque chose
et / ou a-t-il un nom?
3 Réponses :
in Haskell, Cela peut vous aider à réaliser que (->) A code> est de a -> quelque chose code>. N'oubliez pas que vous pouvez transformer un opérateur en une fonction préfixée à l'aide de Parans. Ie (+) 1 1 == 2 code>. Donc, dans ce cas, l'opérateur est le constructeur de type -> code>. Il est utilisé de cette façon, car un foncteur a besoin d'un constructeur de type avec 1 variable, mais -> code> a 2. donc nous l'appliquons partiellement. P>
<$> code> pour ((->) a) code> est juste (.) p >
Je vois, donc ((->) a) code> a type * -> * code>?
Pour être un peu plus explicite, j'ajouterais que (->) code> a type * -> * -> * code> tandis que (->) A code > a genre * -> * code>.
@Carlos no, ((->) A code> n'est pas un type! Mais si vous êtes / type / type /, c'est correct.
D'accord, je l'obtiens maintenant. Merci :)
en fait, Tout comme des fonctions, les constructeurs de type peuvent être partiellement appliqués. dans HASKELLL. P> Vous pouvez vérifier le type toutes les valeurs ont ((->) a) code> n'est pas un type mais un constructeur de type fort>. * code>; Les constructeurs de types ont des types comme * -> * code>, * -> * -> * p> p> p> p>
Mode de pédantisme: Toutes les valeurs ont types i> de type * code>.
Pour ajouter aux réponses plus techniques de Matt Fenwick et Josefg, le premier exemple: ((->) A code> peut être lu comme constructeur de type qui forme des valeurs qui dépendent d'un A code> . Un exemple: Supposons que vous ayez des équipes dont l'adhésion varie au fil du temps. Un moyen possible de représenter c'est comme ceci: ((->) a) code> est un foncteur code>, applicatif code> et monad code>, ce qui signifie que les opérations de classe de type sont disponibles et ont des interprétations très utiles lorsqu'elles sont utilisées avec Historique t code>. P> fmap code> applique une fonction à une valeur dépendante du temps. Ainsi, par exemple, P> personToManager :: Person -> Historical Day Manager
personToManager = ...
managerToVP :: Manager -> Historical Day VP
managerToVP = ...
personToVP :: Person -> Historical Day VP
personToVP p = personToManager p >>= managerToVP
C'est la flèche de fonction ordinaire écrite sous forme de préfixe. C'est-à-dire que
(->) a b code> est identique à celuia -> b code>.Si vous aimez
(3 +) code> au lieu de((+) 3) code>, vous pouvez penser à((->) a) code> comme < Code> (a ->) code> - Même si ce n'est pas une syntaxe valide, cela vous donne une idée de ce que c'est.