Zoeken…


Stack installeren

Mac OS X

Homebrew gebruiken :

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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow