Haskell Language
Empiler
Recherche…
Installation de la pile
Mac OS X
Utiliser Homebrew :
brew install haskell-stack
Créer un projet simple
Pour créer un projet appelé helloworld run:
stack new helloworld simple
Cela créera un répertoire appelé helloworld
avec les fichiers nécessaires à un projet Stack.
Structure
Structure de fichier
Un projet simple contient les fichiers suivants:
➜ helloworld ls
LICENSE Setup.hs helloworld.cabal src stack.yaml
Dans le dossier src
il y a un fichier nommé Main.hs
C'est le "point de départ" du projet helloworld
. Par défaut, Main.hs
contient un simple "Hello, World!" programme.
Main.hs
module Main where
main :: IO ()
main = do
putStrLn "hello world"
Lancer le programme
Assurez-vous d'être dans le répertoire helloworld
et exécutez:
stack build # Compile the program
stack exec helloworld # Run the program
# prints "hello world"
Stackage Packages et modification de la version LTS (resolver)
Stackage est un référentiel pour les packages Haskell. Nous pouvons ajouter ces paquets à un projet de pile.
Ajout de lentille à un projet.
Dans un projet de pile, il existe un fichier appelé stack.yaml
. Dans stack.yaml
il y a un segment qui ressemble à:
resolver: lts-6.8
Stackage conserve une liste de paquets pour chaque révision de lts
. Dans notre cas, nous voulons la liste des paquets pour lts-6.8
Pour trouver ces paquets, visitez:
https://www.stackage.org/lts-6.8 # if a different version is used, change 6.8 to the correct resolver number.
En parcourant les paquets, il y a un Lens-4.13 .
Nous pouvons maintenant ajouter le package de langue en modifiant la section de helloworld.cabal
:
build-depends: base >= 4.7 && < 5
à:
build-depends: base >= 4.7 && 5,
lens == 4.13
Évidemment, si nous voulons changer un LTS plus récent (après sa sortie), nous changeons simplement le numéro du résolveur, par exemple .:
resolver: lts-6.9
Avec la stack build
suivante, Stack utilisera la version LTS 6.9 et téléchargera donc de nouvelles dépendances.
Construire et exécuter un projet de pile
Dans cet exemple, le nom de notre projet est "helloworld" qui a été créé avec stack new helloworld simple
Nous devons d'abord construire le projet avec la stack build
et ensuite nous pouvons l'exécuter avec
stack exec helloworld-exe
Installer pile
En exécutant la commande
stack install
Stack copiera un fichier exécutable dans le dossier
/Users/<yourusername>/.local/bin/
Profilage avec pile
Configurez le profilage pour un projet via une stack
. Construisez d'abord le projet avec l'indicateur --profile
:
stack build --profile
Les drapeaux GHC ne sont pas requis dans le fichier cabal pour que cela fonctionne (comme -prof
). stack
activera automatiquement le profilage pour la bibliothèque et les exécutables du projet. La prochaine fois qu'un exécutable s'exécute dans le projet, les indicateurs habituels +RTS
peuvent être utilisés:
stack exec -- my-bin +RTS -p
Affichage des dépendances
Pour savoir quels paquets dépendent directement de votre projet, vous pouvez simplement utiliser cette commande:
stack list-dependencies
De cette façon, vous pouvez savoir quelle version de vos dépendances a été réduite par pile.
Les projets Haskell se retrouvent souvent dans de nombreuses bibliothèques indirectement, et parfois ces dépendances externes causent des problèmes que vous devez suivre. Si vous vous trouvez avec une dépendance externe malveillante que vous souhaitez identifier, vous pouvez parcourir l'ensemble du graphique de dépendance et identifier les dépendances qui génèrent finalement le paquet indésirable:
stack dot --external | grep template-haskell
stack dot
imprime un graphique de dépendance sous forme de texte pouvant être recherché. Il peut également être consulté:
stack dot --external | dot -Tpng -o my-project.png
Vous pouvez également définir la profondeur du graphique de dépendance si vous le souhaitez:
stack dot --external --depth 3 | dot -Tpng -o my-project.png