یاد بگیرید چگونه تمرینهای Haskell خود را در Exercism Test کنید
برای اجرای تستها، دستور زیر را در پوشهی تمرین خود اجرا کنید:
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 در مجموعهی تست تعریف میشود، که معمولاً در ابتدای آن قرار دارد:
import Test.Hspec (Spec, describe, it, shouldBe)
import Test.Hspec.Runner (configFailFast, defaultConfig, hspecWith)
import ModuleName (someFunc)
main :: IO ()
main ...
در این مثال، فایل تست در خط ۴ ماژولی به اسم ModuleName را import میکند که تابعی به اسم someFunc را export میکند. یعنی باید فایلی به اسم 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 زیبا و اصولی بنویسید.