Suche…


Stack installieren

Mac OS X

Homebrew verwenden :

brew install haskell-stack

Ein einfaches Projekt erstellen

So erstellen Sie ein Projekt namens helloworld run:

stack new helloworld simple

Dadurch wird ein Verzeichnis mit dem Namen helloworld mit den für ein Stack-Projekt erforderlichen Dateien erstellt.

Struktur

Dateistruktur

Ein einfaches Projekt enthält die folgenden Dateien:

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

Im Ordner src befindet sich eine Datei mit dem Namen Main.hs Dies ist der "Ausgangspunkt" des helloworld Projekts. Standardmäßig enthält Main.hs ein einfaches "Hallo, Welt!" Programm.

Main.hs

module Main where

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

Programm ausführen

helloworld Sie sicher, dass Sie sich im Verzeichnis helloworld und führen Sie helloworld aus:

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

Stapelpakete und Ändern der LTS-Version (Resolver-Version)

Stackage ist ein Repository für Haskell-Pakete. Wir können diese Pakete einem Stack-Projekt hinzufügen.

Linse zu einem Projekt hinzufügen.

In einem Stack-Projekt gibt es eine Datei namens stack.yaml . In stack.yaml gibt es ein Segment, das wie stack.yaml aussieht:

resolver: lts-6.8

Stackage enthält eine Liste von Paketen für jede Revision von lts . In unserem Fall möchten wir die Liste der Pakete für lts-6.8 Um diese Pakete zu finden, besuchen Sie:

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

Beim Durchschauen der Pakete gibt es eine Lens-4.13 .

Wir können jetzt das Sprachpaket hinzufügen, indem Sie den Abschnitt von helloworld.cabal :

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

zu:

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

Wenn wir einen neueren LTS ändern möchten (nachdem er veröffentlicht wurde), ändern wir einfach die Resolver-Nummer, zB:

resolver: lts-6.9

Beim nächsten stack build Stack die Version LTS 6.9 verwenden und daher einige neue Abhängigkeiten herunterladen.

Erstellen und Ausführen eines Stack-Projekts

In diesem Beispiel lautet unser Projektname "helloworld", der mit stack new helloworld simple

Zuerst müssen wir das Projekt mit stack build und dann können wir es mit ausführen

stack exec helloworld-exe

Stack installieren

Durch Ausführen des Befehls

stack install 

Stack kopiert eine ausführbare Datei in den Ordner

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

Profilierung mit Stack

Konfigurieren Sie die Profilerstellung für ein Projekt über einen stack . Erstellen Sie zunächst das Projekt mit der --profile :

stack build --profile

GHC-Flags sind in der -prof nicht erforderlich, damit dies funktioniert (wie -prof ). stack aktiviert automatisch die Profilerstellung für die Bibliothek und die ausführbaren Dateien im Projekt. Bei der nächsten Ausführung einer ausführbaren Datei im Projekt können die üblichen +RTS Flags verwendet werden:

stack exec -- my-bin +RTS -p

Abhängigkeiten anzeigen

Um herauszufinden, von welchen Paketen Ihr Projekt direkt abhängt, können Sie einfach diesen Befehl verwenden:

stack list-dependencies

Auf diese Weise können Sie herausfinden, welche Version Ihrer Abhängigkeiten tatsächlich vom Stapel heruntergezogen wurde.

Haskell-Projekte ziehen häufig viele Bibliotheken indirekt ein, und manchmal verursachen diese externen Abhängigkeiten Probleme, die Sie aufspüren müssen. Wenn Sie eine unbefugte externe Abhängigkeit feststellen, die Sie identifizieren möchten, können Sie den gesamten Abhängigkeitsgraphen durchgehen und feststellen, welche Ihrer Abhängigkeiten letztendlich das unerwünschte Paket mit sich bringt:

stack dot --external | grep template-haskell

stack dot druckt eine Abhängigkeitsgrafik in Textform aus, die durchsucht werden kann. Es kann auch angesehen werden:

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

Sie können auch die Tiefe des Abhängigkeitsgraphen festlegen, wenn Sie möchten:

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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow