Fixes about Haskell Introduction Presentation

This commit is contained in:
Yann Esposito (Yogsototh) 2018-04-13 22:47:20 +02:00
parent 21f4bf88ba
commit 2e41a6a6c6
Signed by untrusted user who does not match committer: yogsototh
GPG key ID: 7B19A4C650D59646

View file

@ -8,7 +8,9 @@
Initialiser l'env de dev:
#+BEGIN_SRC shell
curl -sSL https://get.haskellstack.org/ | sh
stack new ipfh https://git.io/vbpej && \
cd ipfh && \
stack setup && \
stack build && \
stack test && \
@ -91,6 +93,8 @@ stack bench
+--------------------------------+
#+END_SRC
made with http://asciiflow.com
*** Von Neumann vs Church
- programmer à partir de la machine (Von Neumann)
@ -436,7 +440,7 @@ foo = sum results
. . .
*~fmap~ FTW!!!!! Assurance d'avoir le même résultat avec 32 cœurs*
*~pmap~ FTW!!!!! Assurance d'avoir le même résultat avec 32 cœurs*
#+BEGIN_SRC haskell
import Foreign.Lib (f)
@ -444,7 +448,7 @@ import Foreign.Lib (f)
-- f = ???
foo = sum results
where results = fmap f [1..100]
where results = pmap f [1..100]
#+END_SRC
*** /Pureté/: Structures de données immuable
@ -553,16 +557,21 @@ Composabilité: soit deux ~a~ je peux faire un autre ~a~.
ex: x un widget, y un widget => un widget
~let page = x <+> y~
Gain abstraction, moindre coût.
Gain d'abstraction, moindre coût.
*Hypothèses fortes sur les ~a~*
*** Exemples
- *Semi-groupes* (+)
- *Monoides* (0,+)
- Foncteurs
- Foncteurs Applicatifs
- Monades
- Traversables (map)
- Foldables (reduce)
- *Semi-groupes* 〈+〉
- *Monoides* 〈0,+〉
- *Catégories* 〈obj(C),hom(C),∘〉
- Foncteurs ~fmap~ (~(<$>)~)
- Foncteurs Applicatifs ~ap~ (~(<*>)~)
- Monades ~join~
- Traversables ~map~
- Foldables ~reduce~
* Catégories de bugs évités avec Haskell
@ -669,24 +678,23 @@ foo :: GlobalState -> x
*~foo~ ne peut pas changer =GlobalState=*
* Organisation du Code
*** Grands Concepts
Procedure vs Functions:
- Gestion d'une configuration globale
- Gestion d'un état global
- Gestion des Erreurs
- Gestion des IO
| Gestion d'une configuration globale |
| Gestion d'un état global |
| Gestion des Erreurs |
| Gestion des IO |
*** Monades
Pour chacun de ces /problèmes/ il existe une monade:
- Gestion d'une configuration globale ⇒ ~Reader~
- Gestion d'un état global ⇒ ~State~
- Gestion des Erreurs ⇒ ~Either~
- Gestion des IO ⇒ ~IO~
| Gestion d'une configuration globale | ~Reader~ |
| Gestion d'un état global | ~State~ |
| Gestion des Erreurs | ~Either~ |
| Gestion des IO | ~IO~ |
*** Effets
@ -742,20 +750,45 @@ bot manager rotLog pubsub redbots minSeverity = do
& flip runLoggingT (renderLog minSeverity rotLog)
#+END_SRC
*** Organisation plus pragmatique
- Reader IO
- Insérer l'état dans une ~TVar~, ~MVar~ ou ~IORef~ (meilleur que State pur en
pratique pour la gestion de la concurrence avec IO).
** Règles *pragmatiques*
*** Organisation en fonction de la complexité
#+BEGIN_QUOTE
Make it work, make it right, make it fast
#+END_QUOTE
- Simple: directement IO (YOLO!)
- Medium: Haskell Design Patterns: The Handle Pattern:
https://jaspervdj.be/posts/2018-03-08-handle-pattern.html
- Medium (bis): MTL / Free / Freeer / Effects...
- Gros: Three Layer Haskell Cake:
http://www.parsonsmatt.org/2018/03/22/three_layer_haskell_cake.html
+ Layer 1: Imperatif
+ Orienté Objet (Level 2 / 2')
+ Fonctionnel
*** 3 couches
- *Imperatif*:
ReaderT IO
+ Insérer l'état dans une ~TVar~, ~MVar~ ou ~IORef~ (concurrence)
- *Orienté Objet*:
+ Handle / MTL / Free...
+ donner des access ~UserDB~, ~AccessTime~, ~APIHTTP~...
- *Fonctionnel*: Business Logic ~f : Handlers -> Inputs -> Command~
*** Services / Lib
Service: ~init~ / ~start~ / ~close~ + methodes...
Lib: methodes sans état interne.
* Conclusion
*** Pourquoi s'investir dans Haskell
*** Pourquoi Haskell?
- avantage compétitif: qualité x productivité hors norme
- changera certainement votre approche de la programmation
- changera son approche de la programmation
- les concepts appris sont utilisables dans tous les languages
- permet d'aller là où aucun autre langage ne peut vous amener
- Approfondissement sans fin:
@ -764,7 +797,22 @@ bot manager rotLog pubsub redbots minSeverity = do
- Qualité: tests, preuves
- Organisation: capacité de contraindre de très haut vers très bas
*** Contrôle par le type
*** Avantage compétitif
- France, Europe du sud & Functional Programming
- Maintenance >> production d'un nouveau produit
- Coût de la refactorisation
- "Make it work, Make it right, Make it fast" moins cher.
*** Pour la suite
A chacun de choisir, livres, tutoriels, videos, chat, etc...
- Voici une liste de resources : https://www.haskell.org/documentation
- Mon tuto rapide : [[http://yannesposito.com/Scratch/en/blog/Haskell-the-Hard-Way/][Haskell the Hard Way]]
- Moteurs de recherche par type : [[http://hayoo.fh-wedel.de][hayoo]] & [[http://haskell.org/hoogle][hoogle]]
- Communauté & News : http://haskell.org/news & ~#haskell-fr~ sur freenode
- Libs: https://hackage.haskell.org & https://stackage.org
* Appendix