100 likes | 265 Views
Moodulid. Haskellis paigutatakse programmi väiksemad komponendid moodulitesse. Iga moodul paikneb oma failis ja kui on soov kasutada moodulit suuremas programmis, siis peab mooduli nimi klappima faili nimega Moodul Cards. module Cards where data Card = ... data Deck = ...
E N D
Moodulid. • Haskellis paigutatakse programmi väiksemad komponendid moodulitesse. • Iga moodul paikneb oma failis ja kui on soov kasutada moodulit suuremas programmis, siis peab mooduli nimi klappima faili nimega • Moodul Cards
module Cards where data Card = ... data Deck = ... newDeck :: ... -> Deck newDeck = ... shuffle :: ... -> Deck -> Deck shuffle = ... -- ’deal deck n’ deals ’n’ cards from ’deck’ deal :: Deck -> Int -> [Card] deal deck n = dealHelper deck n [] dealHelper = ...
Eksportimine • Funktsiooni dealHelper väljanägemine sõltub tugevasti sellest, milliseid andmestruktuure me kasutame • me ei taha, et teised inimesed seda funktsiooni välja kutsuda saaksid. module Cards ( Card(), Deck(), newDeck, shuffle, deal ) where ...
data Card = Card Suit Face data Suit = Hearts | Spades | Diamonds | Clubs data Face = Jack | Queen | King | Ace | Number Int • Saab kasutada objekte tüüpi Card • Ei saa konstrueerida oma kaarte • Ei saa kätte salvestatud infot kaartide suuruse ja masti kohta
module Cards ( Card(Card), Suit(Hearts,Spades,Diamonds,Clubs), Face(Jack,Queen,King,Ace,Number), ... ) where ... module Cards ( Card(..), Suit(..), Face(..), ... ) where ...
Importimine module Poker where import Cards • Saab kasutada kõiki funktsioone, tüüpe ja konstruktoreid, mida moodul Cards ekspordib newDeck Cards.newDeck
kaks moodulit ekspordivad sama nimega funktsioone või tüüpe: üks moodulitest tuleb importida qualified- stiilis. import qualified Cards • Siis saab kasutada ainult teist, pikemat moodust, vältimaks tekkida võivat mitmetähenduslikkust.
Võib importida ainult osad funktsioonid import Cards (newDeck) • Osad funktsioonid võib peita import Cards hiding (deal) • Vahel tuleb kasuks lühendamine import qualified Cards as C • Kõiki võimalusi saab omavahel kombineerida
Hierarhiline importimine • võimaldab (teatava tasemeni) kindlaks määrata, kus moodul asub (kaustade struktuuris) • Näiteks Cards.hs võib asuda haskell/Cards/Cards.hs.
module Cards.Cards(...) where ... I import Cards.Cards import qualified Cards.Cards as Cards ... Cards.newDeck ...