Haskell Language
Stapel
Suche…
Stack installieren
Mac OS X
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