Haskell Language
stack
Zoeken…
Stack installeren
Mac OS X
brew install haskell-stack
Een eenvoudig project maken
Om een project genaamd helloworld run te maken:
stack new helloworld simple
Hiermee maakt u een map met de naam helloworld
met de bestanden die nodig zijn voor een Stack-project.
Structuur
Bestandsstructuur
Een eenvoudig project bevat de volgende bestanden:
➜ helloworld ls
LICENSE Setup.hs helloworld.cabal src stack.yaml
In de map src
bevindt zich een bestand met de naam Main.hs
Dit is het "startpunt" van het helloworld
project. Standaard bevat Main.hs
een eenvoudige "Hallo wereld!" programma.
Main.hs
module Main where
main :: IO ()
main = do
putStrLn "hello world"
Het programma uitvoeren
Zorg ervoor dat u zich in de directory helloworld
en voer uit:
stack build # Compile the program
stack exec helloworld # Run the program
# prints "hello world"
Stapel pakketten en verander de LTS (resolver) versie
Stackage is een repository voor Haskell-pakketten. We kunnen deze pakketten toevoegen aan een stapelproject.
Lens toevoegen aan een project.
In een stack.yaml
is er een bestand met de naam stack.yaml
. In stack.yaml
er een segment dat eruit ziet als:
resolver: lts-6.8
Stackage houdt een lijst met pakketten bij voor elke revisie van lts
. In ons geval willen we de lijst met pakketten voor lts-6.8
Ga naar deze pakketten om te bezoeken:
https://www.stackage.org/lts-6.8 # if a different version is used, change 6.8 to the correct resolver number.
Kijkend door de pakketten is er een Lens-4.13 .
We kunnen nu het taalpakket toevoegen door het gedeelte van helloworld.cabal
:
build-depends: base >= 4.7 && < 5
naar:
build-depends: base >= 4.7 && 5,
lens == 4.13
Als we een nieuwere LTS willen wijzigen (nadat deze is vrijgegeven), veranderen we natuurlijk gewoon het resolvernummer, bijvoorbeeld:
resolver: lts-6.9
Bij de volgende stack build
Stack de LTS 6.9-versie en downloadt daarom enkele nieuwe afhankelijkheden.
Bouw en voer een stapelproject uit
In dit voorbeeld is onze projectnaam "helloworld", die is gemaakt met stack new helloworld simple
Eerst moeten we het project bouwen met stack build
en daarna kunnen we het uitvoeren
stack exec helloworld-exe
Stapel installeren
Door het commando uit te voeren
stack install
Stack kopieert een uitvoerbaar bestand naar de map
/Users/<yourusername>/.local/bin/
Profilering met stapel
Configureer profilering voor een project via stack
. Bouw eerst het project met de vlag --profile
:
stack build --profile
GHC-vlaggen zijn niet vereist in het cabal-bestand om dit te laten werken (zoals -prof
). stack
schakelt automatisch profilering in voor zowel de bibliotheek als de uitvoerbare bestanden in het project. De volgende keer dat een uitvoerbaar bestand in het project wordt uitgevoerd, kunnen de gebruikelijke +RTS
vlaggen worden gebruikt:
stack exec -- my-bin +RTS -p
Afhankelijkheden bekijken
Om erachter te komen van welke pakketten uw project rechtstreeks afhankelijk is, kunt u eenvoudig deze opdracht gebruiken:
stack list-dependencies
Op deze manier kunt u erachter komen welke versie van uw afhankelijkheden daadwerkelijk per stapel werden afgebroken.
Haskell-projecten trekken vaak indirect veel bibliotheken binnen en soms veroorzaken deze externe afhankelijkheden problemen die u moet opsporen. Als je merkt dat je een vreemde externe afhankelijkheid hebt die je wilt identificeren, kun je de hele afhankelijkheidsgrafiek doornemen en bepalen welke van je afhankelijkheden uiteindelijk het ongewenste pakket binnenhalen:
stack dot --external | grep template-haskell
stack dot
drukt een afhankelijkheidsgrafiek af in tekstvorm die kan worden doorzocht. Het kan ook worden bekeken:
stack dot --external | dot -Tpng -o my-project.png
U kunt ook de diepte van de afhankelijkheidsgrafiek instellen als u wilt:
stack dot --external --depth 3 | dot -Tpng -o my-project.png