Koska edellisellä viikolla hommat jäivät pahasti kesken, jatketaan tällä viikolla lisäohjeistuksen ja parin lisätehtävän kanssa Tämä kappale perustuu Real World Haskellin lukuun 11.
Tehtävänanto
Toteuta kätevä ja turvallinen kirjasto tälläisen tutkimusaineiston käyttöön. Kirjaston tulee pystyä käsittelemään suorakaiteita ja niihin liittyviä biomassa- ja lannoitearvoja. Koska lannoite- ja mittausalat voivat olla osittain päällekkäin, niin kirjasto tarvitsee ehdottomasti funktiot, joilla voidaan laskea, leikkaavatko nämä alat, millainen suorakaide leikkaus on, mikä on suorakaiteiden tai niiden yhdisteen pinta-ala sekä määritellä pienin mahdollinen suorakaide, joka kattaa koko mittausjoukon.
Tyypit
Määrittele seuraavat tyypit
2D - piste.
Suorakaide.
Alue, joka on ei leikkaavien suorakaiteiden joukko.
Tyyppi, joka yhdistää mittaustiedon alueeseen.
Tyyppejä erilaisille mittausarvoille.
Operaattorit
Määrittele seuraavat operaattorit em. tyypeille.
Pinta-ala niille tyypeille joilla sellainen on
Yhdiste
Leikkaus
Erotus
Pienin peittävä suorakaide
Funktiot, jotka käsittelevät mittaustietoa
Luokat
Listaa ja perustele, mitkä tyyppisi ovat, tai eivät ole,
tyyppiluokkaa Eq
tyyppiluokkaa Ord
tyyppiluokkaa Show
tyyppiluokkaa Monoid
tyyppiluokkaa Functor
tyyppiluokkaa Category
tyyppiluokkaa Applicative
tyyppiluokkaa Monad
Keksitkö muita hyödyllisiä tyyppiluokkia?
Toteutus
Toteuta yo. määritelmät. Huomaa, että demokerta on ehkä mielekkäämpi, jos teet toteutukset hieman huolimattomasti ja testaamatta. Voit myös tehdä toteutukset samaan aikaan seuraavan tehdävän kanssa.
Lainalaisuudet
Kirjoita seuraavat lainalaisuudet formaalisti QuickCheck-määreinä:
a ∩ b = b ∩ a
ala (a ∪ b) = ala (b ∪ a)
yhdiste a b `pois yhdiste b a == tyhjä
a ∩ a == a
a ∪ a == a
a ∩ (a ∩ b) = a ∩ b
a ∩ tyhja = tyhja
ala a > 0
(a ∪ b) ∪ c = a ∪ (b ∪ c)
a ∪ (b ∩ c) = (a ∪ b) ∩ (a ∪ c)
a ∩ (b ∪ c) = (a ∩ b) ∪ (a ∩ c)
pieninpeitto xs = pieninpeitto (permutaatio xs)
Testaus
Testaa lainalaisuutesi QuickCheckillä.
Löysitkö virheitä? Kerro, mitä virheitä löysit, ja mikä testi paljasti ne.
Testaa HPC ohjelmalla, että testisi kattavat koko kirjaston.
Todista (käsin) mielestäsi olennaisin tai heikoimmin QuickCheckille sopiva lainalaisuus.