Principal problème de la GEPLUIE
Elle est ancienne. CEP a été écrit à un moment la version 6.8 de GHC a été utilisé. 6.8 utilisé la base de la version 3.0.x.x. 6.10.1 déjà utilisé 4.0.0.0, qui a introduit de nombreux changements. Et ce n'est que le saut de 6.8 à 6.10. La version actuelle de GHC est de 7,8, et la prochaine 7.10 va changer les monades de manière significative (voir ci-dessous).
Cela étant dit, il est toujours une ressource utile pour les lignes directrices générales. Mais gardez à l'esprit que certaines bibliothèques, changé depuis sa sortie.
Remarques générales
- Lire les commentaires. Ils contiennent généralement des informations si l'alinéa/de l'article est toujours d'actualité et/ou de travail.
- Lire la documentation des bibliothèques de fonctions que vous souhaitez utiliser. Même si vous êtes paresseux, vous en connaissez au moins les types.
Remarques sur les chapitres
C'est juste un rapide aperçu de certaines des choses que j'ai remarqué lors de la lecture de la GEPLUIE. C'est sans doute incomplète.
Chapitre 14. Les Monades & Chapitre 15. La programmation avec des monades
Code de rupture: Applicative m => Monad m
Bientôt, Applicative
va devenir une super-classe de Monad
, ce qui n'était pas prévu en 2007.
Dans GHC 7.10, Applicative
va devenir une super-classe de Monad
, ce qui peut potentiellement rendre beaucoup de code d'utilisateur. Pour faciliter cette transition, GHC génère désormais des avertissements lorsque les définitions de conflit avec l'Applicatif-Monade Proposition (AMP).
Voir 7.8.1 notes de version.
L' State
/Writer
/Reader
monades
Dans la Volonté de l'état réel de l'errance de se lever? l'article, les auteurs affirment
Afin de définir un Monad
de l'instance, il nous faut fournir un bon constructeur de type ainsi que des définitions pour (>>=)
et return
. Cela nous conduit à la vraie définition de l' State
.
-- file: ch14/State.hs
newtype State s a = State
runState :: s -> (a, s)
}
Ce n'est pas vrai plus, depuis State
et ses amis sont maintenant mis en œuvre par
type State s = StateT s Identity
type Writer w = WriterT w Identity
type Reader r = ReaderT r Identity
Ils sont donc définis par leur monade transformateur.
Erreur de manipulation a complètement changé à partir de 6.8 à 6.10, mais vous l'avez remarqué que déjà. Mieux de lire la documentation.
Certains de l'exemple semble être rompu. Il existe également d'autres HTTP bibliothèques disponibles.
Générale des techniques de profilage sont toujours les mêmes, et l'exemple (voir ci-dessous) est un cas d'étude pour les problèmes qui peuvent se produire dans votre programme. Mais RWH est manquant multi-thread de profilage, par exemple via ThreadScope. Aussi, paresseux IO n'est pas concerné pendant tout le livre, autant que je sache.
mean :: [Double] -> Double
mean xs = sum xs / fromIntegral (length xs)
Chapitre 24 & Chapitre 28 (Simultanées et de la programmation parallèle et STM)
Alors Que Le Chapitre 24. Concurrent et la programmation multicœur et le Chapitre 28. Logiciel de la mémoire transactionnelle sont toujours d'actualité, Simon Marlow le livre de la Programmation Parallèle et Concurrente en Haskell se concentre uniquement sur la simultanées et de la programmation parallèle et est assez récente (2013). La programmation sur GPU et repa sont complètement absentes dans RWH.
Comme avec les autres chapitres, les orientations générales de la bibliothèque de conception est toujours bien écrit et pertinent. Toutefois, en raison de certains changements (?) concernant l' ST
, le résultat ne peut pas être compilé plus.
Chapitre 27. La programmation réseau
C'est encore pour la plupart jusqu'à ce jour. Après tout, la programmation réseau ne change pas si facilement. Toutefois, le code utilise obsolète fonctions bindSocket
et sClose
, qui devrait être remplacé par bind
et close
(de préférence via le qualifiée d'importation). Gardez à l'esprit que c'est de très bas niveau, vous pouvez utiliser un plus spécialisée de haut niveau de la bibliothèque.
Le contenu manquant
Certains sujets ne sont pas abordés dans la GEPLUIE à tous. Cela inclut streaming bibliothèques telles que tuyaux et de conduits, et aussi des lentilles.
Il existe plusieurs ressources pour ces sujets, mais voici quelques liens vers des introductions pour vous donner une idée de ce qu'ils sont sur la. Aussi, si vous souhaitez utiliser des vecteurs, l'utilisation de l' vectors
package.
Lentilles
Streaming bibliothèques