2016-03-29 1 views
-1

C'est le newtype:Que signifie le type?

newtype Combine a b = Combine { unCombine :: (a -> b) } 

Je vais avoir du mal à comprendre beaucoup de choses sur cette ligne, mais le premier est les accolades. Que sont-ils et que font-ils ici - créer une fonction à partir de deux types de données d'entrée?

+1

Si newtype vous dérange alors je vous suggère de lire un tutoriel ou deux et de sortir sur #haskell à irc.freenode.net pour poser des questions. Les concepts de types de données algébriques sont-ils nouveaux pour vous? C'est bon de dire oui! J'ai trouvé que ce concept confond beaucoup de gens quand je parle de Haskell. –

Répondre

4

Les accolades permettent une syntaxe d'enregistrement. Il peut être considéré comme sténographie pour ce qui suit:

newtype Combine a b = Combine (a -> b) 

unCombine :: Combine a b -> (a -> b) 
unCombine (Combine a) = a 

syntaxe d'enregistrement crée la fonction unCombine automatiquement pour vous si vous ne disposez pas de le définir pour vous-même. Il est pratique lorsque vos types ont beaucoup de paramètres de type.

+0

Ne comprends pas un coup de ce que cette chose fait bien. Mais je suppose que c'est quelque chose pour une autre question. Attendra avec l'acceptation jusqu'à demain. –

+3

Ça ne fait vraiment rien. C'est juste un wrapper autour d'une fonction qui prend un argument de type 'a' et retourne une valeur de type' b'. Après, disons 'let f = Combine (\ x -> x + 3)', vous pouvez lancer '(unCombine f) 5' et il retournera 8. – chepner

+3

Notez que la syntaxe d'enregistrement n'est pas ** strictement équivalente à la code ci-dessus. Par exemple, en utilisant la syntaxe d'enregistrement, vous pouvez faire '(Combine id) {unCombine = const 1}'. C'est juste une partie de ce qu'ils peuvent faire. – Bakuriu