Eh bien, si personne d'autre va essayer, alors je vais prendre un autre (un peu plus soigneusement étudié) coup de couteau à répondre à ces questions.
tl;dr
Question 1: C'est juste la façon dont le résultat des dés. C'était une circonstancielle de choix et c'est resté.
Question 2: Oui (sorta). Plusieurs parties ont certainement été à réfléchir à la question.
Lire la suite pour un très longwinded explication pour chaque réponse, autour de des liens et des citations que j'ai trouvé pour être pertinent et intéressant.
Pourquoi le C-comme enregistrer une syntaxe adoptée au cours d'un nettoyeur de mise en page basée sur l'approche?
Les chercheurs Microsoft a écrit une Histoire de Haskell papier. La Section 5.6 parle de dossiers. Je vais citer le premier petit peu, ce qui est perspicace:
L'une des plus évidentes les omissions sur les premières versions de Haskell
a l'absence de registres, offrant des champs nommés. Étant donné que
les enregistrements sont extrêmement utiles dans la pratique, pourquoi ont-ils été omis?
Les experts de microsoft répond aux répondre à sa propre question
La raison la plus forte semble avoir été qu'il n'était pas évident "droit" de conception.
Vous pouvez lire le livre vous-même, pour les détails, mais ils disent Haskell finalement adopté enregistrement de la syntaxe en raison de la "pression pour le nom des champs dans la structure des données".
Au moment où le Haskell 1.3 conception était en cours, en 1993, l'utilisateur
la pression pour le nom des champs dans la structure des données a été forte, de sorte que le comité a finalement adopté un design minimaliste...
Vous vous demandez pourquoi, c'est pourquoi il est? Eh bien, ce que je comprends, si le début de Haskellers a leur manière, nous pourrions nous n'avons jamais eu d'enregistrement de la syntaxe dans la première place. L'idée était apparemment poussé sur Haskell par des gens qui ont déjà l'habitude du C-comme la syntaxe, et étaient plus intéressés à obtenir de C-comme les choses en Haskell, plutôt que de faire les choses "le Haskell façon". (Oui, je me rends compte c'est une interprétation subjective. J'ai peut être tort, mais en l'absence de meilleures réponses, c'est la meilleure conclusion que je peux en tirer.)
Il n'y a rien dans le pipeline pour résoudre le problème de l'espace de noms?
Tout d'abord, pas tout le monde sent qu'il y a un problème. Il y A quelques semaines, une Raquette de passionné de a expliqué à moi (et d'autres) que le fait d'avoir différentes fonctions avec le même nom était une mauvaise idée, car cela complique l'analyse de la question "quelle est la fonction nommée _ faire?" Il n'est pas, en fait, une fonction, mais plusieurs. L'idée peut être très gênant pour Haskell, car elle complique l'inférence de type.
Sur une légère tangente, les experts de microsoft répond aux ont des choses intéressantes à dire au sujet de Haskell typeclasses:
C'était une heureuse coïncidence
du moment que Wadler et Blott qui s'est passé pour produire cette idée clé
juste au moment où la langue de conception était encore en pleine évolution.
N'oubliez pas que Haskell a été jeunes une fois. Certaines décisions ont été prises tout simplement parce qu'ils ont été faits.
De toute façon, il existe quelques façons intéressantes que ce "problème" pourrait être traitée:
Type Dirigé la Résolution de Nom, une proposition de modification de Haskell (mentionné dans les commentaires ci-dessus). Viens de lire cette page pour voir ce qu'il touche beaucoup de domaines de la langue. Dans l'ensemble, il n'est pas une mauvaise idée. Beaucoup de réflexion a été mis en elle de sorte qu'il ne sera pas en conflit avec des trucs. Cependant, il faudra encore beaucoup plus d'attention à l'obtenir en le maintenant-(plus-)matures Haskell langue.
Un autre Microsoft papier, OO Haskell, propose une extension du langage Haskell à l'appui "ad hoc surcharge". C'est plutôt compliqué, vous n'aurez qu'à consulter la Section 4 pour vous-même. L'essentiel, c'est-à-automatiquement (?) en déduire "A" types, et d'ajouter une étape supplémentaire à la vérification de type à ce qu'ils appellent "l'amélioration", vaguement décrites dans le sélectif citations qui suivent:
Compte tenu de la contrainte de classe Has_m (Int -> C -> r)
il y a
un seul exemple pour m qui correspond à cette contrainte...Depuis il y a exactement un choix, nous devons le faire maintenant, et qui à son tour
correctifs r
être Int
. D'où nous obtenons le type attendu pour f
:
f :: C -> Int -> IO Int
...[ce] est tout simplement un
choix de conception, et l'autre fondée sur l'idée que la classe Has_m
est fermé
Mes excuses pour la incohérente citant; si cela vous aide, à tous, très bien, sinon il suffit d'aller lire le papier. C'est compliqué (mais convaincante) idée.
Chris Fait a utilisé le Modèle de Haskell pour fournir duck-typing en Haskell dans une vague manière similaire à l'OO Haskell papier (à l'aide de "A" types). Quelques session interactive des échantillons à partir de son site:
λ> flap ^. donald
*Flap flap flap*
λ> flap ^. chris
I'm flapping my arms! -- ' close quote :P dumb syntax highlighter
fly :: (Has Flap duck) => duck -> IO ()
fly duck = do go; go; go where go = flap ^. duck
λ> fly donald
*Flap flap flap*
*Flap flap flap*
*Flap flap flap*
Cela nécessite un peu passe-partout/insolite syntaxe, et personnellement, je préfèrent s'en tenir à typeclasses. Mais bravo à Chris Fait, librement, à la publication de son terre-à-terre dans la région.