Μάθε πώς να δοκιμάζεις τις ασκήσεις σου στη Haskell στο Exercism
Τρέξε την παρακάτω εντολή στον φάκελο της άσκησής σου για να εκτελέσεις τις δοκιμές:
stack test
Για να εκτελούνται οι δοκιμές σε κάθε αποθήκευση αρχείου, τρέξε αυτή την εντολή:
stack test --file-watch
No .cabal file found in directory
Πιθανότατα τρέχεις μια παλιά έκδοση του stack και πρέπει να την αναβαθμίσεις.
No compiler found, expected minor version match with...
Try running "stack setup" to install the correct GHC...
Απλώς κάνε ό,τι λέει και θα κατεβάσει και θα εγκαταστήσει τη σωστή έκδοση του μεταγλωττιστή:
stack setup
Η λύση μιας άσκησης είναι μια μονάδα Haskell. Το όνομα της μονάδας ορίζεται σε μια εντολή εισαγωγής στο αρχείο δοκιμών, συνήθως στην αρχή:
import Test.Hspec (Spec, describe, it, shouldBe)
import Test.Hspec.Runner (configFailFast, defaultConfig, hspecWith)
import ModuleName (someFunc)
main :: IO ()
main ...
Σε αυτό το παράδειγμα, το αρχείο δοκιμών εισάγει, στη γραμμή 4, μια μονάδα
με το όνομα ModuleName, που εξάγει μια συνάρτηση με το όνομα someFunc.
Αυτό σημαίνει ότι πρέπει να δημιουργήσεις ένα αρχείο με το όνομα
ModuleName.hs που θα είναι κάπως έτσι:
module ModuleName (someFunc) where
someFunc :: ...
someFunc ...
Θα βρεις ένα αρχείο με αυτό το όνομα ήδη στη θέση του στο src/,
το οποίο μπορείς να χρησιμοποιήσεις ως σημείο εκκίνησης για τη λύση σου.
Απλώς έχε υπόψη ότι αυτό το stub υπάρχει μόνο για να ξεκινήσεις. Μη διστάσεις να το αλλάξεις εντελώς αν πιστεύεις ότι είναι το σωστό.
Αν θέλεις να χρησιμοποιήσεις κάποια πακέτα για να γράψεις μια πιο κομψή
λύση, πρώτα πρόσθεσε τα πακέτα στις εξαρτήσεις της λύσης σου στο package.yaml:
library:
exposed-modules: ModuleName
source-dirs: src
dependencies:
- foo
- bar
Όταν δουλεύεις τοπικά, μπορείς να χρησιμοποιήσεις όποια πακέτα θέλεις. Ο διαδικτυακός εκτελεστής δοκιμών, ωστόσο, έχει πρόσβαση μόνο σε ένα περιορισμένο σύνολο πακέτων. Τα διαθέσιμα πακέτα είναι
base, containers, array, time, mtl, deepseq, exceptions, bytestring), και επιπλέονΑν υποβάλεις μια λύση που χρησιμοποιεί ένα πακέτο που δεν είναι διαθέσιμο, τότε ο εκτελεστής δοκιμών θα πέσει πάνω στην έλλειψη πρόσβασης στο διαδίκτυο και θα βγάλει ένα σφάλμα που μοιάζει κάπως έτσι:
Cabal file info not found for unavailable-package-1.0@..., updating
Selected mirror https://hackage.haskell.org/
Downloading root
HttpExceptionRequest Request {
host = "hackage.haskell.org"
...
}
(ConnectionFailure ...)
Αν θέλεις να παίξεις με τη λύση σου στη GHCi, απλώς τρέξε την εντολή:
stack ghci
Συνιστάται ανεπιφύλακτα να τρέξεις το hlint πάνω στη λύση σου για να δεις
αν πιάνει κάτι που σου ξεφεύγει:
hlint ModuleName.hs
Δεν χρειάζεται να δεχτείς όλες τις προτάσεις του hlint, αλλά συνήθως
θα σε βοηθήσουν να μάθεις πώς να γράφεις όμορφο, ιδιωματικό κώδικα σε Haskell.