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


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow