Ricerca…


Installazione dello stack

Mac OSX

Utilizzando l' homebrew :

brew install haskell-stack

Creare un semplice progetto

Per creare un progetto chiamato corsa helloworld :

stack new helloworld simple

Questo creerà una directory chiamata helloworld con i file necessari per un progetto Stack.

Struttura

Struttura del file

Un semplice progetto include i seguenti file:

➜  helloworld ls 
LICENSE          Setup.hs         helloworld.cabal src              stack.yaml

Nella cartella src c'è un file chiamato Main.hs Questo è il "punto di partenza" del progetto helloworld . Di default, Main.hs contiene un semplice "Hello, World!" programma.

Main.hs

module Main where

main :: IO ()
main = do
  putStrLn "hello world"

Esecuzione del programma

Assicurati di essere nella directory helloworld ed esegui:

stack build # Compile the program
stack exec helloworld # Run the program
# prints "hello world"

Pacchetti di impilaggio e modifica della versione LTS (resolver)

Stackage è un repository per i pacchetti Haskell. Possiamo aggiungere questi pacchetti a un progetto di stack.

Aggiunta di obiettivi a un progetto.

In un progetto stack, c'è un file chiamato stack.yaml . In stack.yaml c'è un segmento che assomiglia a:

resolver: lts-6.8

Stackage mantiene un elenco di pacchetti per ogni revisione di lts . Nel nostro caso vogliamo la lista dei pacchetti per lts-6.8 Per trovare questi pacchetti visitare:

https://www.stackage.org/lts-6.8 # if a different version is used, change 6.8 to the correct resolver number.

Guardando attraverso i pacchetti, c'è un Lens-4.13 .

Ora possiamo aggiungere il pacchetto della lingua modificando la sezione di helloworld.cabal :

  build-depends: base >= 4.7 && < 5

a:

  build-depends: base >= 4.7 && 5,
                 lens == 4.13

Ovviamente, se vogliamo cambiare un LTS più recente (dopo il rilascio), cambiamo semplicemente il numero del resolver, ad es .:

resolver: lts-6.9

Con lo stack build successivo, Stack utilizzerà la versione LTS 6.9 e quindi scaricherà alcune nuove dipendenze.

Costruisci ed esegui un progetto Stack

In questo esempio il nome del nostro progetto è "helloworld" che è stato creato con lo stack new helloworld simple

Per prima cosa dobbiamo costruire il progetto con lo stack build e poi possiamo eseguirlo con

stack exec helloworld-exe

Stack di installazione

Eseguendo il comando

stack install 

Stack copierà un file eseguibile nella cartella

/Users/<yourusername>/.local/bin/

Profilazione con Stack

Configura il profilo per un progetto tramite stack . Per prima cosa costruisci il progetto con il flag --profile :

stack build --profile

I flag GHC non sono richiesti nel file cabal perché funzioni (come -prof ). stack accenderà automaticamente la profilazione sia per la libreria che per i file eseguibili nel progetto. La prossima volta che un eseguibile viene eseguito nel progetto, è possibile utilizzare i normali flag +RTS :

stack exec -- my-bin +RTS -p

Visualizzazione delle dipendenze

Per scoprire da quali pacchetti dipende direttamente il tuo progetto, puoi semplicemente usare questo comando:

stack list-dependencies

In questo modo puoi scoprire quale versione delle tue dipendenze è stata effettivamente abbattuta per stack.

I progetti Haskell si trovano spesso a dover indirizzare molte librerie indirettamente ea volte queste dipendenze esterne causano problemi che è necessario rintracciare. Se ti trovi con una dipendenza esterna canaglia che vorresti identificare, puoi aprire l'intero grafico delle dipendenze e identificare quale delle tue dipendenze sta ultimamente inserendo il pacchetto indesiderato:

stack dot --external | grep template-haskell

stack dot stampa un grafico delle dipendenze in forma di testo che può essere cercato. Può anche essere visualizzato:

stack dot --external | dot -Tpng -o my-project.png

Puoi anche impostare la profondità del grafico delle dipendenze se lo desideri:

stack dot --external --depth 3 | dot -Tpng -o my-project.png


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow