ابتدای محتوای صفحه
۱۳ - ۵صادراتیهای ماژول
بطور پیشفرض، اگه هیچ صادراتی در ماژول ِتون تعیین نکنین، همهی انقیادهای سطح بالا صادر، و قابلِ وارد کردن به سایرِ ماژولها میشن. ماژول ِ Hello
همینطور بود:
module Hello where
sayHello :: IO ()
sayHello = do
putStrLn "hello world"
اما چه اتفاقی میوفته اگه یه لیستِ خالی از صادرها بدیم؟
module Hello
()
where
sayHello :: IO ()
sayHello = do
putStrLn "hello world"
اگه بسازیم، خطای زیر رو میده:
Not in scope: ‘sayHello’
میشه صراحتاً اون تابع رو به لیستِ صادرها اضافه کنیم:
module Hello
( sayHello )
where
sayHello :: IO ()
sayHello = do
putStrLn "hello world"
حالا تابعِ sayHello
صادر میشه. تو این پروژه به نظر بیخود میاد، اما در پروژههای بزرگتر گاهی اوقات به کار میاد.
افشا کردنِ ماژولها
اول یه ماژول ِ جدید با یه اجراییه ِ IO اضافه میکنیم تا به main
بدیم:
-- src/DogsRule.hs
module DogsRule
( dogs )
where
dogs :: IO ()
dogs = do
putStrLn "Who's a good puppy?!"
putStrLn "YOU ARE!!!!!"
بعد هم ماژول ِ Main
ِمون رو تغییر میدیم که ازش استفاده کنه:
module Main where
import DogsRule
import Hello
main :: IO ()
main = do
sayHello
dogs
اما اگه بسازیمِش، خطا میگیریم:
Could not find module ‘DogsRule’
-- پیدا نشد ‘DogsRule’ م. ماژولِ
مثلِ بالا، ماژول ِ DogsRule
رو باید در پاراگراف ِ library
افشا کنیم:
library
hs-source-dirs: src
exposed-modules: DogsRule
, Hello
build-depends: base >= 4.7 && < 5
default-language: Haskell2010
دیگه میتونه حکومتِ سگها رو پیدا کنه.